【发布时间】:2016-03-27 19:57:41
【问题描述】:
我有一段这样的 R 代码
s<-vector()
s[1]=1
for(i in 2:10){
ds= 1/i/s[i-1]
s[i]= s[i-1]+ds
}
s
结果是:
[1] 1.000000 1.500000 1.722222 1.867384 1.974485 2.058895 2.128281 2.187014
[9] 2.237819 2.282505
以上是一个玩具示例,我正在尝试使用 s[i-1] 来更新 s[i],请帮我解决这个问题,我尝试了以下方法:
s<-vector()
s[1]<-1
sapply(2:10,FUN = function(i){
if(i==1){
return(s[i])
}
ds<-1/i/s[i-1]
#print(paste(i,s_new,ds,ds+s[i-1]))
s[i]= s[i-1]+ds
return(s[i])
}
)
以上方法无效
【问题讨论】:
-
为什么不直接返回
s[i-1]+ds?s[i] <- s[i-1]+ds的赋值只会在函数内部发生,而不是全局发生。 -
有时您只需要使用
for循环。如果速度太慢,您可能不得不用 C++ 或 FORTRAN 重写。那有什么问题?有一些技巧可以帮助for提高循环速度,例如预定义向量,而不是像第一个示例那样增长它们。 -
@TARehman 我试过你说的,但还是不行。
-
对不起,我看到它时脑子里放了个屁。我现在明白了。你需要(我相信)
<<-。
标签: r vectorization apply lapply sapply