【问题标题】:Creating a vector from a loop outputs in R从 R 中的循环输出创建向量
【发布时间】:2021-04-11 22:40:18
【问题描述】:

我正在尝试生成有效的代码来创建一个向量,该向量用于替换数据框中的变量名称以在更大的脚本中运行。更具体地说,我想将“A1”更改为“A.1”,将“A2”更改为“A.2”,依此类推,直到“'Letter'.8。我成功完成了一个循环,但似乎不能将其输出到向量。下面是代码和输出。我已经尝试了基于类似问题对输出进行向量化的各种方法,但没有任何效果......

#1 定义字母向量并添加函数

     v1 = LETTERS[1:10]
     add = function(x, inc = 1) {
     y <- x + inc
     }

#create 循环以生成所需的名称

     d <- add(0)
     while (d < 9) {
     for (l in v1) {
     print(paste(l,".",d))
     }
     d <- add(d)
     }

【问题讨论】:

    标签: r loops vector output


    【解决方案1】:

    您可以在基础 R 中使用 outer

    result <- c(outer(LETTERS[1:10], 1:8, paste, sep = '.'))
    result
    
    # [1] "A.1" "B.1" "C.1" "D.1" "E.1" "F.1" "G.1" "H.1" "I.1" "J.1" "A.2" "B.2" "C.2" "D.2"
    #[15] "E.2" "F.2" "G.2" "H.2" "I.2" "J.2" "A.3" "B.3" "C.3" "D.3" "E.3" "F.3" "G.3" "H.3"
    #[29] "I.3" "J.3" "A.4" "B.4" "C.4" "D.4" "E.4" "F.4" "G.4" "H.4" "I.4" "J.4" "A.5" "B.5"
    #[43] "C.5" "D.5" "E.5" "F.5" "G.5" "H.5" "I.5" "J.5" "A.6" "B.6" "C.6" "D.6" "E.6" "F.6"
    #[57] "G.6" "H.6" "I.6" "J.6" "A.7" "B.7" "C.7" "D.7" "E.7" "F.7" "G.7" "H.7" "I.7" "J.7"
    #[71] "A.8" "B.8" "C.8" "D.8" "E.8" "F.8" "G.8" "H.8" "I.8" "J.8"
    

    【讨论】:

    • 优秀 - “外部”功能对我来说是新的 - 谢谢你的洞察力 Ronak
    【解决方案2】:

    这就是你要找的吗?

    paste0(rep(LETTERS[1:10],times=8),".",rep(1:8,each = 10))
    [1] "A.1" "B.1" "C.1" "D.1" "E.1" "F.1" "G.1" "H.1" "I.1" "J.1" "A.2" "B.2" "C.2" "D.2" "E.2" "F.2" "G.2" "H.2" "I.2" "J.2" "A.3" "B.3"
    [23] "C.3" "D.3" "E.3" "F.3" "G.3" "H.3" "I.3" "J.3" "A.4" "B.4" "C.4" "D.4" "E.4" "F.4" "G.4" "H.4" "I.4" "J.4" "A.5" "B.5" "C.5" "D.5"
    [45] "E.5" "F.5" "G.5" "H.5" "I.5" "J.5" "A.6" "B.6" "C.6" "D.6" "E.6" "F.6" "G.6" "H.6" "I.6" "J.6" "A.7" "B.7" "C.7" "D.7" "E.7" "F.7"
    [67] "G.7" "H.7" "I.7" "J.7" "A.8" "B.8" "C.8" "D.8" "E.8" "F.8" "G.8" "H.8" "I.8" "J.8"
    

    【讨论】:

    • 谢谢伊恩 - 不幸的是,当我尝试你的代码时,“str_c”函数没有被识别,但你的解决方案很有希望......
    • 哇,我什至没有意识到 str_c 来自 stringr,试试 paste0。对此感到抱歉
    • 这成功了 Ian - 另一个优雅的解决方案!
    【解决方案3】:

    你可以使用append()函数:

    v1 = LETTERS[1:10]
    add = function(x, inc = 1) {
         y <- x + inc
     }
    vct = c()
    d <- add(0)
    while (d < 9) {
      for (l in v1) {
         vct <- append(vct, paste(l,".",d))
      }
      d <- add(d)
    }
    print(vct)
    

    【讨论】:

    • 很高兴它有帮助!如果您能对所有有用的答案进行投票,那就太好了:)
    猜你喜欢
    • 2016-08-18
    • 1970-01-01
    • 2011-12-15
    • 1970-01-01
    • 1970-01-01
    • 2016-03-02
    • 1970-01-01
    • 2021-12-08
    • 2014-08-05
    相关资源
    最近更新 更多