修改列表中所有向量的子集(无循环)

时间:2018-02-01 10:32:55

标签: r list na

我知道我可以像这样修改矢量的子集:

v1 = c(3, NaN, 5)
v1[is.nan(v1)] = 0 # change NaN values to 0

现在,是否可以对列表中的所有向量执行此操作,而不必循环到每个元素中?

lst1 <- list('v1'=c(1,NaN,3), 'v2'=c(3,2,NaN), 'v3'=c(NaN,1,3))

类似的东西:

lst1[[*]][is.nan(lst1[[*]])] = 0

我认为这可以通过循环中的向量迭代来解决,但我想知道是否有更好的方法来解决这个问题。

2 个答案:

答案 0 :(得分:2)

如果我们感兴趣的是没有循环,那么JQueryUI unlist元素,一次性执行listreplace

relist

答案 1 :(得分:1)

一种可能的解决方案是使用lapply。它基本上迭代了向量,但比使用for循环稍微好一些。

lapply(lst1, function(x) {x[is.na(x)]<-0;x})

输出:

$v1
[1] 1 0 3

$v2
[1] 3 2 0

$v3
[1] 0 1 3