Подтвердить что ты не робот

Атрибуты доступа класса в R

Я создал объект в R, содержащий несколько атрибутов.

Как я могу легко получить к ним доступ.

Я могу сделать

attr(x, attributeName)

или

attributes(x)$attributeName

но ни один из них не очень удобен.

Есть ли более быстрый способ (например, точка в С++ или java)

4b9b3361

Ответ 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\""