【问题标题】:Generate an accumulated array of strings from a string array从字符串数组生成字符串的累积数组
【发布时间】:2016-05-06 10:05:50
【问题描述】:

我有这个:

str <- c("var1", "var2", "var3")

我想生成以下字符串数组:

"c ~ var1"
"c ~ var1 + var2"
"c ~ var1 + var2 + var3"

我知道我可以对其进行硬编码,因为只有 3 个字符串,但我想要一个用于任意大小向量的方法。有没有简单的方法来实现这一点?

【问题讨论】:

    标签: r string concatenation string-concatenation


    【解决方案1】:

    只是使用“公式”对象的另一种选择:

    lapply(Reduce(function(x, y) setNames(data.frame(x, y), 
                                          c(names(x), y)), 
                  str, init = c(c = "c"), acc = TRUE)[-1L], 
           formula)
    #[[1]]
    #c ~ var1
    #<environment: 0x0321adcc>
    #
    #[[2]]
    #c ~ var1 + var2
    #<environment: 0x0321adcc>
    #
    #[[3]]
    #c ~ var1 + var2 + var3
    #<environment: 0x0321adcc>
    

    如果真的需要一个“字符”对象,那么我们可以在上面使用lapply(., deparse),或者如果最终目标是一个公式,而不是lapply,我们可以循环使用for 来保留原始的“环境” .

    【讨论】:

      【解决方案2】:

      试试:

      > lapply(sapply(1:length(str), seq), function(x){ 
            paste0("c ~ ",paste(str[x],collapse=" + ")) })
      [[1]]
      [1] "c ~ var1"
      
      [[2]]
      [1] "c ~ var1 + var2"
      
      [[3]]
      [1] "c ~ var1 + var2 + var3"
      

      您可以将lapply 更改为sapply 以获取字符向量。

      【讨论】:

        【解决方案3】:
        x <- c("var1", "var2", "var3")
        
        for (i in seq_along(x)) {
          vars <- paste(x[1:i], collapse = " + ")
          print(paste("c ~", vars))
        }
        
        # [1] "c ~ var1"
        # [1] "c ~ var1 + var2"
        # [1] "c ~ var1 + var2 + var3"
        

        注意尽量避免将变量分配给现有函数的名称(例如str -- 查看?str)

        【讨论】:

          【解决方案4】:

          你可以试试这个:

          out <- vector()
          out[1] <- paste("c ~",str[1])
          for (i in 2:length(str)) out[i] <- paste(out[i-1], "+", str[i])
          

          【讨论】:

            猜你喜欢
            • 2012-08-16
            • 2018-07-26
            • 1970-01-01
            • 2011-12-02
            • 2021-06-15
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多