【发布时间】:2015-10-05 21:19:35
【问题描述】:
我有一个向量,比如f1。
f1 = c(1, 0, 0, 1, 0, 1, 1, 1, 0, 1, -6)
我想根据原始列表中 1 的位置,将此向量拆分为一个嵌套列表,如下所示。相同的R代码如下:
dfg <- function(f1) {
df<-which(f1 %in% 1)
m<-c()
for(i in 1:df[2]-1) {
m<-c(m,list(f1[i]))
}
m<-c(m,list(f1[df[2]:length(f1)]))
return(m)
}
输出如下:
[[1]]
numeric(0)
[[2]]
[1] 1
[[3]]
[1] 0
[[4]]
[1] 0
[[5]]
[1] 1 0 1 1 1 0 1 -6
到目前为止一切顺利。现在注意 m[[5]] 的长度 > 1。
我想重复上面的这个过程,直到输出中每个嵌套级别的每个元素的长度都是 1。
如何确保上面列出的 R 函数可以执行任意级别的嵌套?
编辑:根据 cmets 的要求,我给出了整个事情的预期最终结果,如下所示。
[[1]] 数字(0)
[[2]] [1] 1
[[3]] [1] 0
[[4]] [1] 0
[[5]]
[[5]][[1]] 数字(0)
[[5]][[2]] [1] 1
[[5]][[3]] [1] 0
[[5]][[4]]
[[5]][[4]][[1]] 数字(0)
[[5]][[4]][[2]] [1] 1
[[5]][[4]][[3]]
[[5]][[4]][[3]][[1]] 数字(0)
[[5]][[4]][[3]][[2]] [1] 1
[[5]][[4]][[3]][[3]]
[[5]][[4]][[3]][[3]][[1]] 数字(0)
[[5]][[4]][[3]][[3]][[2]] [1] 1
[[5]][[4]][[3]][[3]][[3]] [1] 0
[[5]][[4]][[3]][[3]][[4]] [1] 1 -6
(我知道最后一个元素的长度是 2,而不是 1。但这对我来说不是问题。我将在函数 dfg 中对其进行排序。)
【问题讨论】:
-
我只有一个问题。为什么?
-
因为我在其他工作中需要这个。