Скажем, у меня есть список 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