ifelse 可以有效地用于没有 return 的输出吗?
Can ifelse be used effectively with outputs that have no return?
考虑以下示例代码:
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)
但这可能会引发与输出长度有关的错误。
@r2evans 点,ifelse
是数据。对于函数,您可以使用 walk
之类的东西
purrr::walk(ranVec, ~if(.x <= 0.4) f1() else f2())
不确定您的实际应用是什么,但如果可以的话,如果您计算所有点(特别是如果您可以矢量化计算)然后将它们全部添加到绘图中,而不是一个,这样会更快一个。
考虑以下示例代码:
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)
但这可能会引发与输出长度有关的错误。
@r2evans 点,ifelse
是数据。对于函数,您可以使用 walk
purrr::walk(ranVec, ~if(.x <= 0.4) f1() else f2())
不确定您的实际应用是什么,但如果可以的话,如果您计算所有点(特别是如果您可以矢量化计算)然后将它们全部添加到绘图中,而不是一个,这样会更快一个。