从r中嵌套列表中第一项的总和中减去一

从r中嵌套列表中第一项的总和中减去一,r,R,我有一个初始嵌套的整数向量列表(列表列表列表),其中包含随机替换某些整数的NA值。在嵌套列表中,如果一个向量包含所有NA值,则需要将其拆分为两个列表(如果嵌套列表中的多个向量包含所有NAs,则需要将其拆分为多个列表)。我最终需要一个值向量,它将嵌套列表的长度加和减1,即sum(length(list[[I]]]-1,其中I是嵌套列表中的向量列表,并删除任何小于或等于0的值 到目前为止,我已经能够做到这一点,但我意识到,如果一个列表被“人工”分解为2+个列表,我只需要从嵌套列表的第一个位置减去一个

我有一个初始嵌套的整数向量列表(列表列表列表),其中包含随机替换某些整数的
NA
值。在嵌套列表中,如果一个向量包含所有
NA
值,则需要将其拆分为两个列表(如果嵌套列表中的多个向量包含所有
NA
s,则需要将其拆分为多个列表)。我最终需要一个值向量,它将嵌套列表的长度加和减1,即
sum(length(list[[I]]]-1
,其中
I
是嵌套列表中的向量列表,并删除任何小于或等于0的值

到目前为止,我已经能够做到这一点,但我意识到,如果一个列表被“人工”分解为2+个列表,我只需要从嵌套列表的第一个位置减去一个。此外,如果嵌套列表的第一个位置是
NA
,则嵌套列表中的后续列表不需要减去1

下面是一些示例代码,提供了完整嵌套列表、随机分配NA值的嵌套列表以及示例列表的最终所需总和向量的示例

#Full List
L.full<-list(list(1,3,c(0,2,0),c(0,0)),list(1,6,c(0,3,2,0,1,0),c(0,0,0,1,0,0),1,2,c(0,1),2,c(0,0)),
             list(1,0),list(1,0),list(1,4,c(2,0,0,0),c(4,1),c(1,0,0,0,0),0),list(1,0))
#Nested list with "random" NAs
L.miss<-list(list(1,3,c(0,NA,0),c(0,0)),list(1,6,c(0,3,NA,0,NA,0),c(0,NA,0,1,0,0),1,NA,c(0,1),2,c(0,0)),
             list(1,NA),list(1,0),list(1,NA,c(NA,0,0,0),c(NA,NA),c(1,0,0,NA,0),0),list(1,0))
#Desired final output
L.want<-c(5,11,5,1,3,5,1)

谢谢-如果这个问题对本论坛来说太具体,请告诉我,我会删除它。

我想我解决了它-删除初始
L中的第一个位置要简单得多。miss
嵌套列表然后完全忽略整个“减1”:

#Delete first instance
l<-L.miss
for (i in 1:length(l)){
  l[[i]][[1]]<-NULL
}

#Same code as above but for loop sums without -1
test<-lapply(lapply(seq_along(l), function(nm) {split(l[[nm]], cumsum(sapply(l[[nm]], function(x) all(is.na(x)))))}), function(lstA) lapply(lstA,function(x) Filter(function(y) !all(is.na(y)), x)))
test2<-unlist(test,recursive=FALSE)
test3<-rapply(test2,function(x) x[!is.na(x)], how="replace") #remove NAs
test4<-integer()
for (i in 1:length(test3)){
  test4[i]<-sum(lengths(test3[[i]]))
} 
test5<-test4[test4>0] #remove values <=0

#result
#> test5
#[1]  5 11  5  1  3  5  1
#删除第一个实例

L更具体更好,感谢您提供数据和预期结果。我不清楚您是如何获得
L.want
。例如,您能否解释一下如何获得
L.want[5]
I.e 3和
L.miss[[5]]
?很高兴澄清-在
L.full
中的第5个位置是一个包含六个向量的列表。
L.miss
随机将整数替换为
NA
。由于
L.miss[[5]]
中的位置
2
和位置
4
将所有整数替换为
NA
s,因此应将其“分解”为三个“列表”:
[1]
[NA,0,0,0]
,以及最后两个向量的列表,
[1,0,0,NA,0]
[0]
。由于我正在移除NA值,从第一个位置减去一个,将嵌套列表中所有列表的长度相加,并移除所有具有0值的列表,
L.miss[[5]]
最终应作为'L.want'中的
3
5
作出贡献
#Delete first instance
l<-L.miss
for (i in 1:length(l)){
  l[[i]][[1]]<-NULL
}

#Same code as above but for loop sums without -1
test<-lapply(lapply(seq_along(l), function(nm) {split(l[[nm]], cumsum(sapply(l[[nm]], function(x) all(is.na(x)))))}), function(lstA) lapply(lstA,function(x) Filter(function(y) !all(is.na(y)), x)))
test2<-unlist(test,recursive=FALSE)
test3<-rapply(test2,function(x) x[!is.na(x)], how="replace") #remove NAs
test4<-integer()
for (i in 1:length(test3)){
  test4[i]<-sum(lengths(test3[[i]]))
} 
test5<-test4[test4>0] #remove values <=0

#result
#> test5
#[1]  5 11  5  1  3  5  1