我有很多列表,我想将每个列表的最小值相加,最小值小于3。 对于瞬间,
a <- c(3,4,1,5,6)
b <- c(2,1,1,0,5)
c <- c(6,7,5,4,4)
list1 <- list(a,b,c)
minlist1 <- lapply(list1, min)
sum(unlist(minlist1 <=1))
> minlist1
[[1]]
[1] 1
[[2]]
[1] 0
[[3]]
[1] 4
> sum(unlist(minlist1 <=3))
[1] 2
#but according to the minlist1 the value should be sum up is 1 and 0
#so the result should be 1 no 2.
但是根据minlist1,应该求和的值是1和0。因此结果应该是1否2。 请给我一个提示,我该怎么做。谢谢
答案 0 :(得分:3)
您快到了。当您检查minlist1 <= 3
时,返回的结果为TRUE,TRUE,FALSE。当您尝试对逻辑向量求和时,将TRUE强制为1,将FALSE强制为0。您需要显式子集通过过滤器的元素。
尝试
minlist1 <- sapply(list1, min)
sum(minlist1[minlist1 <= 3])
[1] 1
答案 1 :(得分:0)
只是为了向您展示另一种方式。
minlist1 <- unlist( sapply(list1, function(x){ res = min(x); if(res <=3) res else { NULL } }) )
sum(minlist1)
#[1] 1
请注意:
在这里,您使用的“技巧”中NULL
不能存在于向量中,因此总和中的值> 3将被删除。在控制台中输入c(1,NULL,NULL,3)
。