例如
testList<-list(list(a=1,b=2,c=3),c(1,2),list(a=1,b=2,c=0))
我有一个数字矢量列表或3个元素列表。
我想要一个指示列表元素的布尔值,其中第三个元素(元素c)> 0。
如果我跑步
sapply(testList,function(x)is.list(x) & x[[3]]>1)
我得到:
x [[3]]中的错误:下标超出范围。
但是,真正的问题在于,x[[3]]>1
只能应用于列表,而不能应用于向量。
的boolean
需要是长度testList
。有任何简单的方法吗?
我们可以使用if/else
条件来解决这个问题。在if/else
确认第二个条件将只适用于list
。
sapply(testList, function(x) if(is.list(x)) x[[3]] >0 else FALSE)
#[1] TRUE FALSE FALSE
根据 ?"if"
if返回所求值的表达式的值,如果不存在则返回NULL(如果没有,则可能发生)。
当有NA
值时,也可以使用此方法而无需使用其他大括号。
testList[[3]][[3]] <- NA
sapply(testList, function(x) if(is.list(x)) x[[3]] >0 & !is.na(x[[3]]) else FALSE)
#[1] TRUE FALSE FALSE
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句