我有一段这样的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 这不是我经常做的事。看见 this question 了解R中环境如何工作的详细信息。
<<-
s
我不喜欢下面的版本,主要是因为它混合了 return() 直接指派 <<- 。在这一点上,您似乎还可以使用注释中提到的循环。
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 } )