【问题标题】:Use result for next iterative step in R将结果用于 R 中的下一个迭代步骤
【发布时间】:2021-01-03 02:05:47
【问题描述】:

我是迭代计算 R 的新手。我想做一个串行计算 sucn,因为我在下一个结果中使用了以前的结果。下面的代码展示了一种计算序列差分方程的代码尝试:

quadmap <- function(start,rho,niter) {
  #variables
  x_1<- start
  r<-rho
  n<-niter
  print(c('x_1','r','n'))
  print(c(x_1,r,n))  
  
  for (i in 1:n){
  x_k_1<-x_1
  xk <-  r*x_k_1*(1-x_k_1)
  x_k_1<- xk
  
  print(xk)
  
  }
  
}
  

我想在计算中使用新的 xk 作为新的 'x_k_1' 直到 n 循环。

我没有得到想要的输出

【问题讨论】:

    标签: r function for-loop iteration repeat


    【解决方案1】:

    如果你对递归版本感兴趣,这里有一个例子

    quadmap <- function(start,rho,niter) {
      if (niter == 1) return(start)
      x <- quadmap(start,rho,niter-1)
      c(x,rho*tail(x,1)*(1-tail(x,1)))
    }
    

    示例

    > quadmap(0.5,1,5)
    [1] 0.5000000 0.2500000 0.1875000 0.1523438 0.1291351
    
    > quadmap(0.8,3,5)
    [1] 0.8000000 0.4800000 0.7488000 0.5642957 0.7375982
    

    【讨论】:

    • 你能解释一下发生了什么吗?我看到您在开始计算之前将函数分配给 x 。另外请解释tail()的使用。谢谢。
    • @user1916067 x 是一个向量,其中包含来自第一次 n-1 迭代的所有值。要添加当前值,我们获取最后一个元素tail(x,1) 并将其放入公式中,并将rho*tail(x,1)*(1-tail(x,1)) 附加到现有的x 作为当前迭代的输出。
    【解决方案2】:

    第二次尝试给了我想要的结果:

    quadmap <- function(start,rho,niter) {
      #variables
      x_1<- start
      r<-rho
      n<-niter
      print(c('x_1','r','n'))
      print(c(x_1,r,n))
      
     
     for(i in 1:n) {
        x_1 <-  r* x_1*(1- x_1)
        
        print(x_1)
      
     }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-11-15
      • 1970-01-01
      • 2022-01-05
      相关资源
      最近更新 更多