【问题标题】:Use paste0 to create multiple object names with a for loop使用 paste0 通过 for 循环创建多个对象名称
【发布时间】:2019-09-10 12:20:19
【问题描述】:

我想使用 for 循环创建多个对象名称。我尝试了以下方法,但都失败了:

somevar_1 = c(1,2,3)
somevar_2 = c(4,5,6)
somevar_3 = c(7,8,9)
for (n in length(1:3)) {
x <- as.name(paste0("somevar_",[i]))
x[2]
}

对于各自的迭代,期望的结果是xsomevar_1somevar_2somevar_3,而x[2] 分别是258

我应该怎么做?

【问题讨论】:

  • 这是你想要做的as.character(c(somevar_1,somevar_2,somevar_3))
  • 我不确定我是否理解您的评论。但下面的 Aron 所做的是我正在寻找的。​​span>

标签: r list for-loop paste


【解决方案1】:
somevar_1 = c(1,2,3)
somevar_2 = c(4,5,6)
somevar_3 = c(7,8,9)
for (n in 1:3) {
  x <- get(paste0("somevar_", n))
  print(x[2])
}

结果

[1] 2
[1] 5
[1] 8

【讨论】:

    【解决方案2】:

    我们可以使用mget 来获取列表中所有需要的对象,并使用sapply 从每个对象中提取第二个元素。

    sapply(mget(paste0("somevar_", 1:3)), `[`, 2)
    
    #somevar_1 somevar_2 somevar_3 
    #        2         5         8 
    

    【讨论】:

    • 这种函数式方法是更好的答案。
    • 谢谢罗纳克。这个想法是使用 for 循环根据另一个列表更新一个列表。比如:for (n in 2) { x &lt;- get(paste0("somelist_", n)) listofNLD[[n]] &lt;- x[['NLD']] }你能告诉我你的代码是如何工作的吗?
    • @Tom 可能类似于Map(function(x, y) {listofNLD[[x]] &lt;- y[["NLD"]];listofNLD}, 1:3, mget(paste0("somevar_", 1:3)))
    猜你喜欢
    • 1970-01-01
    • 2014-11-27
    • 2013-09-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-29
    • 1970-01-01
    • 2020-05-15
    相关资源
    最近更新 更多