Как мне заменить каждый элемент вектора на мой ссылочный класс? - PullRequest
0 голосов
/ 21 марта 2019

Я пытаюсь преобразовать каждый объект в моем векторе строк в ссылочный класс.Предположим, мой справочный класс:

myrefclass <- function(str) {
  methods <- list()

  methods$cnt <- function() {
    return(str_length(str))
  }

  methods
}

Я попытался преобразовать следующие векторы ( хотя и без успеха ):

v1 <- c("ABC", "D", "FGHI")
v2 <- c(ABC="ABC", D="D", FGHI="FGHI")

Затем я пытаюсь применитьссылочный класс для каждого элемента вектора:

res1 <- sapply(v1, myrefclass)
res2 <- sapply(v2, myrefclass)

Я бы тогда подумал, что мог бы использовать это следующим образом (, но, к сожалению, это не работает ):

> res1["ABC"]$cnt
NULL
> res2["ABC"]$cnt
NULL

Как создать вектор ссылочных классов и получить доступ к его методам?

ПРИМЕЧАНИЕ # 1: Я бы предпочел решение base-R, но было бы интересно посмотреть, какие пакеты могут помочь

ПРИМЕЧАНИЕ № 2: Я ищу динамическое решение.Чтобы проиллюстрировать этот момент, предположим, что расширением этого вопроса будет использование res1 или res2 для поиска всех строк, имеющих $cnt=3.Следовательно, доступ к строкам, как в res1$ABC$cnt, не будет работать, поскольку вы не знаете, что ABC находится в v1 или v2 (в зависимости от того, что вы считаете уместным).

1 Ответ

0 голосов
/ 17 апреля 2019

разобрался с ответом на это.Моя проблема заключалась в том, что я ДОЛЖЕН создать вектор ссылочных классов, поскольку, как мне кажется, он испортил мои объекты и соответствующие им методы, я ДОЛЖЕН создать список:

v2 <- list(ABC="ABC", D="D", FGHI="FGHI")
res2 <- lapply(v2, myrefclass)

А затем для поиска длины конкретной строки я бы сделал:

res2[["ABC"]]$cnt()
[1] 3
res2[["FGHI"]]$cnt()
[1] 4

Вуаля!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...