如何使用矢量化在 R 中迭代地更新变量及其先前的值?

How to iteratively update an variable with its previous value in R with vectorization?

我有一段这样的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。这不是我经常做的事情。有关环境如何在 R 中工作的详细信息,请参阅 this question

我不喜欢下面的版本,主要是因为它混合了 return() 和直接赋值 <<-。在这一点上,您似乎还不如使用评论中提到的循环。

s <- vector()
s[1] <- 1

sapply(2:10,FUN = function(i){

    if(i == 1){

        return(s[i])
    }
    ds <- 1/i/s[i - 1]
    s[i] <<- s[i - 1] + ds
    }
)