粘贴函数

时间:2018-04-16 06:36:13

标签: r

我希望使用嵌套循环为25个清单变量生成125个标签。 5个潜在变量 as_1_1到as_25_1 ... as_1_5到as_25_5 我似乎无法让代码工作。 我试过这个:

for (i in 1:25) for (j in 1:5) 
  {
    AsLabs1  <- paste("as",1:i,1:j,sep="_")
  }


AsLabs1

"as_1_1"  "as_2_2"  "as_3_3"  "as_4_4"  "as_5_5"  "as_6_1"  "as_7_2"  
"as_8_3"  "as_9_4"  "as_10_5" "as_11_1" "as_12_2" "as_13_3" "as_14_4" 
"as_15_5" "as_16_1" "as_17_2" "as_18_3" "as_19_4" "as_20_5" "as_21_1" 
"as_22_2" "as_23_3" "as_24_4" "as_25_5"

但我需要为每个j(1到5)的值输出所有25个变量的循环,而不仅仅是5。 我意识到解决方案必须非常简单,我做错了。

3 个答案:

答案 0 :(得分:2)

这应该这样做:

paste("as", apply(expand.grid(1:25, 1:5), 1, paste, collapse = "_"), sep = "_")

您自己的代码稍作修改即可使用:

AsLabs1 <- character()
for (i in 1:25) {
  for (j in 1:5) {
    AsLabs1  <- append(AsLabs1, paste("as", i, j, sep = "_"))
  }
}

编辑修正了嵌套循环中的错误。

答案 1 :(得分:2)

我个人不会打扰嵌套循环,只需将paste与“_”seprep函数一起使用{{1指定的{}和times个参数。

each

... 如果您决定使用嵌套循环,可以稍微修改一下代码,添加AsLabs <- paste(rep("as", times = 25*5), rep (1:25, times = 5), rep(1:5, each = 25), sep = "_") 函数:

rep

不会使用嵌套循环,因为 )这是不必要的复杂代码和 ii 更慢运行(我的粘贴方法比嵌套循环解决方案快约40倍[并且比安德斯答案中的apply方法快约7倍])

答案 2 :(得分:2)

我会使用outer

paste0('as_', outer(1:25, 1:5, paste, sep = '_'))