gpt4 book ai didi

r - 寻找更高效的 ifelse()

转载 作者:行者123 更新时间:2023-12-04 15:02:45 27 4
gpt4 key购买 nike

而 R 的 ifelse非常方便,它确实有一个特别的缺点:在通话中 ifelse(test, yes, no) yes的所有元素和 no被评估,即使是那些将被扔掉的。

如果您在复杂的数值练习中使用它,这相当浪费,例如在将被馈送到 integrate 的函数中。 , uniroot , optim管他呢。例如,一个人可能有

ifelse(test, f(x, y, z), g(a, b, c))

哪里 fg是任意复杂或缓慢的函数,可能涉及更多嵌套 ifelse的。

有没有人写过 ifelse 的替代品只计算 yes 的元素/ no那会保留吗?基本上,类似的东西
out <- test
for(i in seq_along(out))
{
if(test[i]) out[i] <- f(x[i], y[i], z[i])
else out[i] <- g(a[i], b[i], c[i])
}

但没有显式循环的笨拙/低效。这甚至可能不深入 R 的内部吗?

最佳答案

我不认为问题是ifelse . fg在您的表达式中仅被评估一次。我认为你的问题是 fg向量很慢。

您可以将调用更改为 fg这样它们只能在向量的一个子集上进行评估。

out <- numeric(length(test))  #or whatever the output type is
out[test] <- f(x[test], y[test], z[test])
out[!test] <- g(x[!test], y[!test], z[!test])

如果 test 的任何元素,您需要调整它是 NA .

关于r - 寻找更高效的 ifelse(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8831221/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com