这个How to use `[[` and `$` as a function?问题的跟进:我开始使用原始设置播放一下(为简单起见,将大小从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

我认为我了解-搜索“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

现在我的头很痛。有人可以在这里扩展什么[[(或其sapply方法)吗?

最佳答案

您可以将sapply和lapply视为一个以seq_along(NOSJ)作为索引向量运行的for循环。

 for( i in seq_along(NOSJ) NOSJ[[i]]  .... then use "[[" with the 3rd argument

因此,第一和第二个结果将是:
> NOSJ[[1]][[1]]
$a
[1] 1

$b
[1] 1

> NOSJ[[2]][[1]]
$a
[1] 1

$b
[1] 1
sapplylapply之间的区别在于,如果返回值的维数全部相同,则sapply尝试使用simply2array返回矩阵或数组(在这种情况下,当使用135作为第三个参数时,它们都是这种情况。老实说,我不知道为什么使用2,4或6作为第三个参数不会返回原子向量,我认为应该。

关于r - 在这个sapply示例中, `[[`在寻找什么?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/18763788/

10-13 03:41