如何使用矢量化在 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
}
)
我有一段这样的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
}
)