Попытка заменить значения в векторе, если выполняются условия, с использованием функции быстрого применения, но с трудом с синтаксисом.
v1 <- c(-18,-18,-19,-20,-18,-18,-19)
v2 <- c(34, 7, 8, 9, 7, 10, 30)
Я хочу сравнить элементы в каждом векторе и, если v1 меньше -v2, заменить его значением v2.Я легко могу определить те, которые необходимо заменить:
v1 < (-v2)
[1] FALSE TRUE TRUE TRUE TRUE TRUE FALSE
Я пытался использовать эту функцию mapply, но получаю следующую ошибку
v1 <- mapply(function(x) if (x< (-v2)) (-v2) else x, v1)
Warning messages:
1: In if (x < (-v2)) (-v2) else x :
the condition has length > 1 and only the first element will be used
2: In if (x < (-v2)) (-v2) else x :
the condition has length > 1 and only the first element will be used
Я думаю, это потому, что яЯ не говорю, что нужно сравнивать элементы по порядку, поэтому используется только первый элемент одного из векторов, но я не совсем уверен, как это сделать.Кстати, я знаю, что мог бы сделать это с помощью цикла for, но я стараюсь избегать этого, так как набор данных будет очень большим.Заранее спасибо.
Обновление: я тоже пробовал это, и получил новую ошибку
v1 <- mapply(function(i) if(v1[i]< (-v2[i]) (-v2[i]) else v1[i], seq_along(v1))
Error: unexpected 'else' in "v1 <- sapply(function(i) if(v1[i]< (-v2[i]) (-v2[i]) else"