2015-10-05 40 views
1

中的第二个列表中的N从列表中替换NAs从问题列表中找到问题。我有两个向量列表。那些载体在相同位置具有相同的长度。但是在这些载体中有一些新生。数据可能看起来像由位于第二个列表中的位于R

HH 
[[1]] 
[1] 2 1 5 NA 

[[2]] 
[1] 2 0 5 

[[3]] 
[1] NA 1 NA 

JJ 
[[1]] 
[1] 0 5 8 9 

[[2]] 
[1] NA 1 3 

[[3]] 
[1] 2 8 3 

我的目标是:有来港在所有矢量两份名单等同的位置。更准确地说,编写代码,它将在第一个列表中找到NA,并在第二个列表中以等值位置代替NA。我成功地为矢量写了类似的函数,但是我在这里失败了。你可以帮我吗?这是我的代码。

D<-NULL 
for(j in 1:length(PH)){ 
+ for(i in 1:length(PH[[j]])){ 
+ if(is.na(PH[[j]][i])==FALSE){ 
+ D[[j]][i]=AB[[j]][i]} 
+ else{ 
+ D[[j]][i]=NA}} 
+ } 

回答

2

您可以使用Map

Map(function(u,v) {v[is.na(u)]<-NA;v}, firstlist, secondlist) 

例子:

firstlist = list(c(1,2,3,NA), c('a',NA)) 
secondlist = list(c(NA,22,33,5), c('b','d')) 

#[[1]] 
#[1] NA 22 33 NA 

#[[2]] 
#[1] "b" NA 
+0

我会认真不建议使用这种双循环,这显然不是在如何使用'R'的“心态”! –

2

这是我的两分钱。从@上校的答案拼抢数据,

v1 <- unlist(firstlist) 
v2 <- unlist(secondlist) 
v1[is.na(v2)] <- NA 
relist(v1, firstlist) 

#[[1]] 
#[1] NA "2" "3" NA 

#[[2]] 
#[1] "a" NA 
相关问题