【问题标题】:R for loop to populate new variableR for循环填充新变量
【发布时间】:2016-08-15 06:42:11
【问题描述】:

尊敬的 Stackoverflow 社区,

我的 for 循环不知所措,我很确定这是一个小问题。我确实浏览了已经被问到的循环问题......

这是我目前所拥有的:

xvals <- as.matrix(seq(1,10, 1))

我想根据椭圆创建椭圆

yvals <- for (i in 1:nrow(xvals)){
  p <- 2.69/(1+2.69)
  if (i == 1){
    yvals[i,] <- round(p, 2)}
  else {
    yvals[i,] <- round(1-(p)^i, 2)}
}

不幸的是,这东西老是报错

Error in 1:nrow(xvals) : argument of length 0

当我将 xvals 更改为矩阵时,我得到一个不同的错误:

Error in yvals[i, ] <- round(p, 2) : 
  incorrect number of subscripts on matrix

【问题讨论】:

    标签: r for-loop


    【解决方案1】:

    你真的想要一个矩阵还是一个向量?

    yvals <- replicate(10,0)
    
    p <- 2.69/(1+2.69)
    for (i in 1:length(yvals)){
      if (i == 1){
        yvals[i] <- round(p, 2)
    }
      else {
        yvals[i] <- round(1-(p)^i, 2)}
    }
    
    xvals <- 1:10
    
    plot(xvals, yvals)
    

    【讨论】:

    • 我想使用 xvals 和 yvals 变量来绘制数据点,所以我猜一个向量可以吗??
    • 我是否必须将 p 变量从 for 循环中取出?
    • 不,你不知道,但由于 p 变量对于循环的每次迭代都是相同的,所以将它放在循环之外在技术上更聪明。
    • 明白了!感谢您的提示!
    【解决方案2】:

    我认为您应该首先创建空矩阵以实现循环工作。试试这个,也许对你有帮助

    xvals <- as.matrix(seq(1,10, 1))
    xvals
    
    yvals <- matrix(0, nrow=nrow(xvals),ncol=ncol(xvals))
    yvals
    for (i in 1:nrow(xvals)){
    p <- 2.69/(1+2.69)
      if (i == 1){
        yvals[i,] <- round(p, 2)}
      else {
        yvals[i,] <- round(1-(p)^i, 2)}
    }
    yvals
    

    【讨论】:

      【解决方案3】:

      没有循环

      xvals <- 1:10
      p <- 2.69/(1+2.69)
      yvals <- 1-p^xvals
      yvals[1] <- p
      yvals <- round(yvals, 2)
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-05-27
        • 2018-09-14
        • 1970-01-01
        相关资源
        最近更新 更多