【问题标题】:Looping variables as element names in R?循环变量作为R中的元素名称?
【发布时间】:2018-04-14 03:45:40
【问题描述】:

这是我在其他语言中遇到的一个问题,但目前我正在处理 R。例如,如果您有一个包含 3 个其他列表的列表,分别名为“a”、“b”和“ c",有没有办法遍历list("a","b","c"),并使用迭代变量作为第一个列表元素的名称?

testlist = list("a"=list(1,2,3),"b"=list(4,5,6),"c"=list(7,8,9))
for (i in c("a","b","c")){
  print(testlist$i)
}

而不是

print(testlist$a)
print(testlist$b)
print(testlist$c)

我尝试投射as.name(i) 等,但得到Error in eval(expr, envir, enclos) : attempt to apply non-function

谢谢,

【问题讨论】:

    标签: r


    【解决方案1】:

    基础R:

    lapply(testlist, print)
    

    具有更多扩展空间的第二个选项 - purrr 包。

    library(purrr)
    walk(testlist, print)
    

    walk 特别让您可以在不需要返回任何内容的情况下制作图表、打印或保存输出。更一般地说,返回输出的主要函数是map,但该包还有更多功能:它有让您引用abc 标签(imap)的选项,应用一个从两个不同列表(map2)等获取输入的函数。

    【讨论】:

      【解决方案2】:

      使用相同的示例,您可以这样做

      testlist = list("a"=list(1,2,3),"b"=list(4,5,6),"c"=list(7,8,9))
      for (i in c("a","b","c")){
        print(testlist[[i]])
      }
      

      【讨论】:

      • 我知道您可以迭代列表的索引,但我想知道是否有任何方法可以专门迭代索引的名称?
      • 我不确定我是否理解您的意思。在上面的示例中,i 等于索引的名称(“a”、“b”或“c”)。您可以选择testlist[[1]]testlist[["a"]] 形式的元素。我是否误解了您要做什么?
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-02-26
      • 2019-01-31
      • 2022-11-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-11-13
      相关资源
      最近更新 更多