Скажем, у меня есть список data.frames
dflist <- list(data.frame(a=1:3), data.frame(b=10:12, a=4:6))
Если я хочу, чтобы извлечь первый столбец из каждого элемента в списке, я могу сделать
lapply(dflist, `[[`, 1)
# [[1]]
# [1] 1 2 3
#
# [[2]]
# [1] 10 11 12
Почему я не могу использовать функцию «$» таким же образом
lapply(dflist, `$`, "a")
# [[1]]
# NULL
#
# [[2]]
# NULL
Но обе эти работы:
lapply(dflist, function(x) x$a)
`$`(dflist[[1]], "a")
Я понимаю, что в этом случае можно было бы использовать
lapply(dflist, `[[`, "a")
, но я работал с объектом S4, не похоже, чтобы позволить индексацию через [[
. Например
library(adegenet)
data(nancycats)
catpop <- genind2genpop(nancycats)
mylist <- list(catpop, catpop)
#works
catpop[[1]]$tab
#doesn't work
lapply(mylist, "$", "tab")
# Error in slot(x, name) :
# no slot of name "..." for this object of class "genpop"
#doesn't work
lapply(mylist, "[[", "tab")
# Error in FUN(X[[1L]], ...) : this S4 class is not subsettable
Это один работает 'lapply (dflist, функция (х) "$"(х, "а")) '. – Tim
Хороший вопрос. Fyi, ответ - это вид findable с 'методами (" $ ", dflist [[1]]) – Frank
Ну @Frank, это не значит, что я не знал, что' $ .data.frame' существует, я просто удивлен проблема была вызвана методом диспетчеризации. Я не могу думать о многих других случаях, когда вам нужно явно называть одну форму общей функции. – MrFlick