覆盖两个列表之间的单个对应元素

时间:2016-04-13 11:01:55

标签: r overwrite

我有一个相当小的问题:

想象一下两个列表“default”和“example”,每个列表由5个具有相同名称的元素组成(“p1”,“p2”,“p3”,“p4”,p5)。

如果示例的“p值”分配了一个值,则该值将保留。

如果“p值”没有赋值(NA),则应使用默认的相应“p值”来代替差距。

我知道你可以用for循环遍历每个元素并在for循环中构造一个if循环但是可能有一个更优雅的解决方案吗?

以下是一个示例案例:

example=list(p1=2,p2=3,p3=4,p4=NA,p5=NA)
default=list(p1=26,p2=34,p3=43,p4=11,p5=98)

1 个答案:

答案 0 :(得分:2)

试试这个:

# assign matching p-value from default
example[ is.na(example) ] <- default[ is.na(example) ]

# result
example

# $p1
# [1] 2
# 
# $p2
# [1] 3
# 
# $p3
# [1] 4
# 
# $p4
# [1] 11
# 
# $p5
# [1] 98