2015-10-06 1 views
0

У меня есть простой/запутанный вопрос в R.Как применить функцию к нескольким переменным в R?

Вот пример моей проблемы.

У меня есть строка цифр или символов:

data <- c(1,2,3,4,5) 

и у меня есть функция, которую я хочу, чтобы применить к нескольким переменным в строке.

dd <- function(d){if(d==data[1:3]) 'yes' 
else 'no'} 

, но когда я применить функцию к строке я получил эту ошибку

unlist(lapply(data,dd)) 

сообщение Предупреждения:

1: In if (d == data[1:3]) "yes" : 
    the condition has length > 1 and only the first element will be used 
    2: In if (d == data[1:3]) "yes" : 
    the condition has length > 1 and only the first element will be used 
    3: In if (d == data[1:3]) "yes" : 
    the condition has length > 1 and only the first element will be used 
    4: In if (d == data[1:3]) "yes" : 
    the condition has length > 1 and only the first element will be used 
    5: In if (d == data[1:3]) "yes" : 
    the condition has length > 1 and only the first element will be used 

Итак, мой вопрос, как я могу применить функцию к нескольким переменные в строке не только для первого элемента? , чтобы получить выходной сигнал как

"yes" "yes" "yes" "no" "no" 

Заранее спасибо,

+1

Нет необходимости в 'lapply' цикла:' IfElse (d% в% данных [1: 3], "да", "нет") ' – Roland

+0

Он работает, но как я могу применить это к примеру: , если я хочу иметь «да» для c (1,2) и «no» для «3» и «None» для остальных (4,5)? Есть ли другой способ объединить эти три условия в ifelse? Насколько я знаю, можно определить только 2 условия для ifelse (например, yes/no) – user3576287

ответ

1

Там нет необходимости для lapply цикла. Вы можете использовать векторизованную ifelse и нужно использовать %in%: ifelse(d %in% data[1:3], "yes", "no")

Отвечая на последующий вопрос Ваш комментарий:

Это работает, но как я могу применить это к примеру: если я хочу иметь «да» для c (1,2) и «нет» для «3» и «нет» для остальных (4,5)?

Существует несколько способов достижения этого. Вы можете использовать вложенный ifelse. Однако в конкретном примере, я хотел бы использовать cut:

cut(data, breaks = c(-Inf, 2, 3, Inf), labels = c("yes", "no", "None")) 
#[1] yes yes no None None 
#Levels: yes no None 
+0

Я нашел другой способ, используя вложенный ifelse! спасибо за помощь Роланд! :) – user3576287

 Смежные вопросы

  • Нет связанных вопросов^_^