Можно ли эффективно использовать ifelse с выходами, которые не имеют возврата? - PullRequest
0 голосов
/ 01 мая 2020

Рассмотрим следующий пример кода:

b<-0
plot(0,0)
ranVec<-runif(100)
f1<-function()#ran 40% of the time
  {
    b<-b+1
    points(b,4)
  }
f2<-function()#ran 60% of the time
  {
    b<-b-1
    points(b,4)
  }

В настоящее время я имею дело с чем-то очень похожим, и моя следующая строка кода эффективна:

for(i in 1:100)
{
   if(ranVec[i]<=0.4) f1
   else f2
}

Но было бы Можно ли достичь результата этого предыдущего блока с ifelse? Например, что я действительно хотел написать:

ifelse(rawResults<=0.4, f1, f2)

Но это выдает ошибку, предположительно касающуюся длины вывода.

1 Ответ

0 голосов
/ 02 мая 2020

До точки @ r2evans, ifelse для данных. Для функций вы можете использовать что-то вроде walk

purrr::walk(ranVec, ~if(.x <= 0.4) f1() else f2())

Не уверен, каково ваше реальное приложение, но если вы можете, это будет быстрее, если вы вычислите все точки (особенно если вы можете векторизовать расчет ), а затем добавить их на график сразу, а не по одному.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...