【问题标题】:How to generate a list of strings that ends with a sequence in R如何生成以R中的序列结尾的字符串列表
【发布时间】:2020-08-27 20:06:38
【问题描述】:

所以我试图生成一个带有前缀的字符串列表,并以这样的数字序列结尾:

c("b01001_001", "b01001_002",...,"b01001_030") in R

这是我的代码:

generate_var = function(prefix, length){
  varlist = c()
  i = 1
  while (i <= y){
    if (i < 10){
      var = paste(x, "_00", as.character(i), sep = " ")
    }
    if (i >= 10){
      var = paste(x, "_0", as.character(i), sep = " ")
    }
    varlist[[i]] = var
    i = i + 1
  }
}

varlist = generate_var("b01001", 30)

该函数最终生成了一个空列表。有人可以帮我看看我的代码并告诉我出了什么问题吗?谢谢!

【问题讨论】:

  • 什么是y?你永远不会创造它。 :|

标签: r function loops append


【解决方案1】:

R 具有矢量化函数,使用 pastesprintf

generate_var = function(prefix, length) {
   paste(prefix, sprintf('%03d', seq_len(length)), sep = '_')
   #Much better suggestion by @thelatemail
   #sprintf('%s_%03d', prefix, seq_len(length))
}

generate_var("b01001", 6)
#[1] "b01001_001" "b01001_002" "b01001_003" "b01001_004" "b01001_005" "b01001_006"

就您的代码而言,几乎没有错误。

1) 您在函数中使用了xy,但它们在哪里找不到,也许您的意思是prefixlength

2) 如果您使用paste0 而不是paste,则不需要sep = " " 参数。

3) 使用单方括号 ([]) 而不是双括号 ([[]]) 访问 varlist,因为使用双括号会将 varlist 转换为列表。

4) 最后return(varlist)

generate_var = function(prefix, length){
  varlist = c()
  i = 1
  while (i <= length){
    if (i < 10){
      var = paste0(prefix, "_00", as.character(i))
    }
     if (i >= 10){
       var = paste0(prefix, "_0", as.character(i))
    }
      varlist[i] = var
      i = i + 1
   }
   return(varlist)
}

generate_var("b01001", 5)
#[1] "b01001_001" "b01001_002" "b01001_003" "b01001_004" "b01001_005"

【讨论】:

  • 为什么不使用sprintf 来处理整个事情 - sprintf('%s_%03d', prefix, seq_len(length))
  • 非常感谢罗纳克!我第一次用 R 写函数。我还需要多练习。我查了 paste 和 paste0 确实 paste0 是一个更好的选择。
【解决方案2】:

附加选项

library(stringr)
str_c("b01001_", str_pad(1:30, width = 3, pad = 0))

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-14
    • 2021-10-12
    • 2021-09-05
    • 1970-01-01
    • 2022-11-16
    • 2013-08-23
    相关资源
    最近更新 更多