2016-04-13 2 views
1

У меня есть довольно маленький вопрос:Переписать одиночные соответствующие элементы между двумя списками

Imagine два списка «по умолчанию» и «пример», каждый из них состоит из 5 элементов с одинаковыми названиями («p1», «p2» p3" , „р4“ p5).

в случае, если „р-значении“ пример имеет значение, присвоенное ему, это значение будет оставаться.

в случае „р-значение“ не имеет никакого значения (NA), для замены зазора следует использовать соответствующее значение «p-значение».

Я знаю вы можете пропустить каждый элемент с циклом for и построить if-loop внутри цикла for, но возможно ли более элегантное решение?

Вот пример случай:

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

Пожалуйста, поделитесь своими данными вместо описания его. – mtoto

+1

и заменить с помощью 'is.na()'. что-то вроде 'example [is.na (пример)]' – Jimbou

+0

Возможно, связанная публикация: http://stackoverflow.com/questions/19253820/how-to-implement-coalesce-efficiently-in-r – zx8754

ответ

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 
Смежные вопросы