所以我有一个列表,每个元素都是一个数字向量。每个数字的范围从0到1,我只对那些大于.95的数字感兴趣,但我必须保持它们在矢量上的位置,以及所有其他数字,因为我需要相对于彼此绘制它们的位置。 / p>
l1 = list(c(runif(20)),c(runif(21)),c(runif(22)),c(runif(19)))
所以我尝试将所有低于0.95的数字设置为等于0,使用lapply如下:
l1 = lapply(l1, function(x){x[x<.95]=0})
但这只返回一个相等数量的元素列表作为输入列表(正如人们所期望的那样),但每个元素只是零。
所以我尝试使用for循环:
for(i in 1:length(l1))
{
l1[[i]][l1[[i]]<.95]=0
}
这很有效。每个元素的长度与输入向量相同,并且仅包含0和大于.95
的数字有人可以解释为什么lapply不起作用。我不想使用for循环,因为我被认为它们更慢,而我正在处理的真实数据集要大得多。
一如既往,
所有的帮助表示赞赏,
干杯,
戴维
答案 0 :(得分:3)
使用lapply
和ifelse
:
lapply(l1,function(x) ifelse(x<0.95,0,x))
答案 1 :(得分:2)
你的代码不起作用的原因是因为它只是将x
设置为你想要的,但没有返回值本身。这会解决它:
lapply(l1, function(x) {x[x<.95]=0;x})
我认为ifelse
会更优雅。