применить функцию к вектору с условием ввести 0 (и не применять функцию) для отрицательных значений? - PullRequest
2 голосов
/ 02 марта 2012

Мне нужно применить функцию к вектору b3, но вставить 0 (и не применять функцию), когда b3 <0. </p>

> b3
 [1]  1.5  0.5  5.5  0.5  9.5  8.5  4.5  3.5  3.5  3.5  1.5 -0.5  1.5  5.5  9.5
[16]  5.5  2.5  1.5  2.5  3.5  9.5 -0.5  4.5  2.5  1.5  4.5 -0.5 -0.5  1.5  0.5

> unlist(lapply(b3, function(x) {seq(from = 0.5, to = x)})) 
  [1]  0.5  1.5  0.5  0.5  1.5  2.5  3.5  4.5  5.5  0.5  0.5  1.5  2.5  3.5  4.5
 [16]  5.5  6.5  7.5  8.5  9.5  0.5  1.5  2.5  3.5  4.5  5.5  6.5  7.5  8.5  0.5
 [31]  1.5  2.5  3.5  4.5  0.5  1.5  2.5  3.5  0.5  1.5  2.5  3.5  0.5  1.5  2.5
 [46]  3.5  0.5  1.5  0.5 -0.5  0.5  1.5  0.5  1.5  2.5  3.5  4.5  5.5  0.5  1.5
 [61]  2.5  3.5  4.5  5.5  6.5  7.5  8.5  9.5  0.5  1.5  2.5  3.5  4.5  5.5  0.5
 [76]  1.5  2.5  0.5  1.5  0.5  1.5  2.5  0.5  1.5  2.5  3.5  0.5  1.5  2.5  3.5
 [91]  4.5  5.5  6.5  7.5  8.5  9.5  0.5 -0.5  0.5  1.5  2.5  3.5  4.5  0.5  1.5
[106]  2.5  0.5  1.5  0.5  1.5  2.5  3.5  4.5  0.5 -0.5  0.5 -0.5  0.5  1.5  0.5

дает мне то, что мне нужно, но у меня есть проблемы с негативамизначения b3.Итак, как ввести 0 каждый раз, когда функция получает отрицательное значение в b3?Вот что я получил:

> unlist(lapply(b3, function(x) {ifelse(x>0,seq(from = 0.5, to = x),0)}))
 [1] 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.0 0.5 0.5 0.5 0.5 0.5 0.5 0.5
[20] 0.5 0.5 0.0 0.5 0.5 0.5 0.5 0.0 0.0 0.5 0.5

работает для отрицательных значений, но моя функция работает не так, как ожидалось ...

1 Ответ

3 голосов
/ 02 марта 2012

Извините за предыдущий ответ, читаю слишком быстро.Вы, вероятно, просто хотите использовать if вместо ifelse:

#Small, similar example
b3 <- c(1.5,0.5,5.5,-2.5,1.5)
unlist(lapply(b3, function(x) {if (x < 0) 0 else seq(from = 0.5, to = x)}))
[1] 0.5 1.5 0.5 0.5 1.5 2.5 3.5 4.5 5.5 0.0 0.5 1.5
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...