Мне нужно оценить две функции f
и g
(которые обе являются вычислительно дорогими) поэлементно, в зависимости от результата test
. Преимущество ifelse
заключается в том, что он выполняет векторизованное тестирование и возвращает только подходящие элементы из f
и g
. Так что если у нас есть
ifelse(test, f(y), g(y))
, где y
некоторый большой вектор ifelse
возвращает вектор length(y)
с элементами f(y)
, где test==T
и g(y)
else.
Сделано ли это вычислительно эффективно? Этого не произойдет, когда ifelse
сначала оценивает и f
, и g
для all y
, а затем возвращает только те элементы результирующих двух векторов возврата, которые указаны в результате теста. Это было бы, если бы он только оценил f
, где test==T
и g
для всех остальных; тем самым экономя время вычислений для тех элементов, для которых f
и g
не возвращаются.
Является ли ifelse
лучшим способом выполнить эту задачу для дорогих функций? Что может быть лучше?