后续如何使用`[[`和`$`作为函数?问题:我开始玩原始设置(为简单起见,将尺寸从10000缩小到3)
JSON <- rep(list(x,y),3)
x <- list(a=1, b=1)
y <- list(a=1)
JSON <- rep(list(x,y),3)
sapply(JSON, "[[", "a")
[1] 1 1 1 1 1 1
sapply(JSON,"[[",'b')
[[1]]
[1] 1
[[2]]
NULL
[[3]]
[1] 1
[[4]]
NULL
[[5]]
[1] 1
[[6]]
NULL
sapply(JSON,'[[',1)
[1] 1 1 1 1 1 1
sapply(JSON,'[[',2)
Error in FUN(X[[2L]], ...) : subscript out of bounds
Run Code Online (Sandbox Code Playgroud)
我认为我理解 - 搜索"b"与要求存在第二个元素不同.但后来,我创建了一个更深入的列表:
NOSJ<-rep(list(JSON),3)
sapply(NOSJ,'[[',1)
[,1] [,2] [,3]
a 1 1 1
b 1 1 1
sapply(NOSJ,'[[',2)
$a
[1] 1
$a
[1] 1
$a
[1] 1
Run Code Online (Sandbox Code Playgroud)
而现在我的脑袋受伤了.有人可以扩展这里[[(或它的sapply方法)在这里做什么?
您可以将 sapply 和 lapply 视为对 seq_along(NOSJ) 作为索引向量进行操作的 for 循环。
for( i in seq_along(NOSJ) NOSJ[[i]] .... then use "[[" with the 3rd argument
Run Code Online (Sandbox Code Playgroud)
所以第一个和第二个结果将是:
> NOSJ[[1]][[1]]
$a
[1] 1
$b
[1] 1
> NOSJ[[2]][[1]]
$a
[1] 1
$b
[1] 1
Run Code Online (Sandbox Code Playgroud)
sapply和之间的区别lapply在于,如果返回值的维度都相同,则sapply尝试使用返回矩阵或数组(就像在本例中使用,或作为第三个参数时一样。老实说,我不知道为什么使用2,4,or 6 作为第三个参数不返回原子向量。我认为它应该。simply2array135