代码之家  ›  专栏  ›  技术社区  ›  GeekCat

如何用矢量化迭代更新变量的R值?

  •  1
  • GeekCat  · 技术社区  · 10 年前

    我有一段这样的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])
       }
    )
    

    上述方法不起作用

    1 回复  |  直到 10 年前
        1
  •  2
  •   Community Mohan Dere    9 年前

    我认为使用 <<- 将允许您直接分配给的全局版本 s 这不是我经常做的事。看见 this question 了解R中环境如何工作的详细信息。

    我不喜欢下面的版本,主要是因为它混合了 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
        }
    )
    
    推荐文章