本质上,我想设计一个函数来获取列表的列表......其中最远的嵌套列表最终会有一个向量作为单个元素,而嵌入的每个列表都会有一个向量作为其最后一个元素。
我希望函数做的是查看每个最底层的嵌套元素并计算它们的数量。
例如:Say A是16个向量的列表,B是10个向量的列表,C是12个向量的列表,D是8个向量的列表。 X是包含A,B和向量的列表,Y是包含C,D和向量的列表。 Z是X,Y和矢量的列表。
该函数将采用Z,并输出46(16 + 10 + 12 + 8)。
这是我现在正在使用的代码:
listreader <- function(listoflists)
{
nlist = listoflists
ini = 0
its = 0
if(length(nlist) > 1)
{
for (i in 1:(length(nlist)))
{
listreader(nlist[[i]])
}
}
else
{
ini = ini+1
}
return(ini)
}
答案 0 :(得分:3)
如果我理解正确,只有不包含列表的列表才能将其长度贡献给总数。这似乎有效:
v <- 1:10 # a vector
A <- replicate(16, v, simplify = FALSE) # a list of vectors
B <- replicate(10, v, simplify = FALSE) # a list of vectors
C <- replicate(12, v, simplify = FALSE) # a list of vectors
D <- replicate( 8, v, simplify = FALSE) # a list of vectors
X <- list(A, B, v) # a mixed list
Y <- list(C, D, v) # a mixed list
Z <- list(X, Y, v) # a mixed list
listreader <- function(x) {
if (is.list(x)) {
if (!any(sapply(x, is.list))) {
return(length(x)) # list of vectors
} else {
return(sum(sapply(x, listreader))) # recursion
}
} else {
return(0L) # not a list
}
}
listreader(Z)
# [1] 46
答案 1 :(得分:1)
sum(rapply(Z, function(x){1}))