【问题标题】:How to create a loop that pastes onto the end of the iteration of the loop in R如何创建一个循环粘贴到R中循环迭代的末尾
【发布时间】:2021-01-23 19:40:56
【问题描述】:

我正在尝试编写创建字符向量的循环。我希望每个元素在添加更多字符串的同时复制最后一个元素。例如:

f <- "y ~ x1" "y ~ x1 + x2" "y ~ x1 + x2 + x3" "y ~ x1 + ... + x100"

到目前为止,我有:

f <- character(100)
for(i in 1:100){
  f[i] <- paste0("y ~ x1 +",i) 
}

[1] "y ~ x1 +1" "y ~ x1 +2" "y ~ x1 +3" "y ~ x1 +4"

但无法弄清楚如何将每个最后一次迭代与每个新迭代结合起来。 任何帮助表示赞赏!

谢谢

【问题讨论】:

    标签: r loops iteration


    【解决方案1】:

    我们可以使用来自base Rreformulate

    lapply(1:5, function(i) reformulate(paste0("x", 1:i), "y"))
    

    【讨论】:

      【解决方案2】:

      试试这个方法。您可以组合两个paste0() 广告,使用循环中的索引以智能方式创建公式。代码如下:

      #Code
      f <- character(100)
      #Loop
      for(i in 1:100){
        f[i] <- paste0("y ~ ",paste0("x",1:i,collapse = ' + ')) 
      }
      

      输出(只有一些值):

      head(f)
      [1] "y ~ x1"                          "y ~ x1 + x2"                    
      [3] "y ~ x1 + x2 + x3"                "y ~ x1 + x2 + x3 + x4"          
      [5] "y ~ x1 + x2 + x3 + x4 + x5"      "y ~ x1 + x2 + x3 + x4 + x5 + x6"
      

      或者带有lapply()的简化版:

      #Code2
      f <- lapply(1:100,function(i) paste0("y ~ ",paste0("x",1:i,collapse = ' + ')) )
      

      它将产生相同的输出。

      【讨论】:

      • 成功了!感谢您的帮助,非常感谢。
      • @annie100 很高兴,如果您对达到相同输出的其他方法更加好奇,我还添加了一个没有循环的版本。
      猜你喜欢
      • 2019-12-27
      • 2021-07-25
      • 1970-01-01
      • 2011-06-21
      • 2015-07-09
      • 1970-01-01
      • 2021-04-13
      • 1970-01-01
      • 2015-01-13
      相关资源
      最近更新 更多