Атрибуты доступа класса в R
Я создал объект в R, содержащий несколько атрибутов.
Как я могу легко получить к ним доступ.
Я могу сделать
attr(x, attributeName)
или
attributes(x)$attributeName
но ни один из них не очень удобен.
Есть ли более быстрый способ (например, точка в С++ или java)
Ответы
Ответ 1
Не используйте атрибуты для своего объекта, используйте список:
myobj <- structure(list(a = 1, b = 2), class = "myclass")
print.myclass <- function(x, ...) cat("A: ", x$a, " B: ", x$b, "\n", sep = "")
myobj
Конечно, это может не сработать, если вы расширяете существующий объект (например, вектор), но, по моему опыту, это лучший способ создания объектов.
Ответ 2
возможно, нет встроенной функции, которая является счетной частью. в С++, но вы можете определить его следующим образом:
> `%.%` <- function(o, a) attr(o, as.character(substitute(a)))
> x <- 1
> attr(x, "orz") <- 2
> x%.%orz
[1] 2
Ответ 3
attributes()
возвращает именованный список. Я бы назвал его один раз и сохранил, а затем получил доступ через имена. Нет смысла неоднократно вызывать либо attr()
, либо attributes()
, если вам это не нужно.
x <- 1:10
attr(x, "foo") <- "a"
attr(x, "bar") <- "b"
(features <- attributes(x))
который дает:
R> (features <- attributes(x))
$foo
[1] "a"
$bar
[1] "b"
то доступ обычным способом
R> features["foo"]
$foo
[1] "a"
R> features$foo
[1] "a"
Ответ 4
Пример использования атрибута match.length, возвращаемого из regexpr:
Три строки в векторе, первый и третий включают встроенную строку:
data=c("<a href=\"ch4.html\">Chapter 1</a>",
"no quoted string is embedded in this string",
"<a href=\"appendix.html\">Appendix</a>")
Используйте regexpr для поиска встроенных строк:
> locations <- regexpr("\"(.*?)\"", data)
Матчи находятся в первой строке (при 9 с длиной 10) и третьей строке (при 11 с длиной 15):
> locations
[1] 9 -1 11
attr(,"match.length")
[1] 10 -1 15
attr(,"useBytes")
[1] TRUE
Вектор из атрибута:
> attr(locations,"match.length")
[1] 10 -1 15
Используйте substr и вектор атрибута для извлечения строк:
> quoted_strings=substr( data,
locations,
locations+attr(locations,"match.length")-1 )
> quoted_strings
[1] "\"ch4.html\"" "" "\"appendix.html\""
Возможно, вы хотите удалить встроенные символы кавычек из своих строк:
> gsub("\"", "", quoted_strings)
[1] "ch4.html" "" "appendix.html"
Альтернативой является использование regmatches:
> regmatches(data,locations)
[1] "\"ch4.html\"" "\"appendix.html\""