[英]modifying a subset of all vectors in a list (without loop)
我知道我可以像這樣修改矢量的子集:
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
我認為這可以通過循環中的迭代迭代來解決,但我想知道是否有更好的方法來解決這個問題。
如果大家有興趣不循環,然后unlist
的list
元素,做replace
包換一氣呵成,並relist
它
v1 <- unlist(lst1)
relist(replace(v1, is.nan(v1), 0), skeleton = lst1)
#$v1
#[1] 1 0 3
#$v2
#[1] 3 2 0
#$v3
#[1] 0 1 3
一種可能的解決方案是使用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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.