gpt4 book ai didi

r - 访问lapply/sapply中的先前元素

转载 作者:行者123 更新时间:2023-12-04 16:28:56 32 4
gpt4 key购买 nike

我正在尝试用for函数替换sapply循环。在循环内部,我进行了一些优化,因此需要对下一个循环进行一次优化。

我想出了如何使用sapply来运行优化,但是问题是我需要从sapply中访问以前的结果。

以下只是我要达到的目标的一个随机示例。

sapply(1:4, function(y){
r<-y
if(y!=1){z<-r[y-1]}
else{z<-9}
return(z)
})

[1,] 9 2 NA NA

我期望得到的是这样的:
[1,]    9    1    2   3

我究竟做错了什么?还是没有任何方法可以访问 sapply中的先前迭代结果?

最佳答案

这是一个可能更接近OP用例的示例:

f    = function(x) x^2
g = function(x) abs(x)+rnorm(1)
yvec = 1:4

这是@Andrie提到的 Reduce方法:
set.seed(1)
Reduce(function(z,y) if (is.na(z)) f(y) else g(z), yvec,init=NA_real_,accumulate=TRUE)[-1]
# [1] 1.0000000 0.3735462 0.5571895 -0.2784391

这是每个人都会使用的常识循环(由@digEmAll提及):
set.seed(1)
res <- rep(NA_real_,length(yvec))
for (i in seq_along(yvec)) res[i] = if (i==1) f(yvec[i]) else g(res[i-1])
res
# [1] 1.0000000 0.3735462 0.5571895 -0.2784391

结果是相同的,因此 Reduce只是隐藏了循环,如@Roland所断言的那样。

关于r - 访问lapply/sapply中的先前元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31610303/

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