在循环中检索并打印不同data.frames的部分

时间:2016-07-14 22:36:52

标签: r

我有100个数据框,名称模式为product_<region>。这些名称存储在向量names

我想检查一下,但我不想输入print(product_<region>, n = 10) 100次。

我已经尝试了

for (name in names) {
  print(paste0("product_", name), n = 10)
}

但这不起作用,因为paste0()的输出是一个字符串 - 它不是数据框本身。

如何使用其名称作为字符串检索数据框?

1 个答案:

答案 0 :(得分:4)

问题

  1. 避免使用names,因为它与names(x)
  2. 冲突
  3. 使用get(x)从文本字符串中检索变量。
  4. 最后,print() n=参数。相反,使用head(x)查看data.frame的第一个n = 6L观察结果(或tail(x)表示最后一个n = 6L)。
  5. 然后使用print(x, n=10)作为结果:

      

    print.default(m,...,quote = quote,right = right)出错:

         

    无效&#39; na.print&#39;规范

    建议的解决方案

    for (region in regions) {
      print(head(get(paste0("product_", region)), n = 10))
    }
    

    测试数据

    生成一些样本数据:

    regions = c("chicago","detroit")
    
    set.seed(11)
    
    for(region in regions){
      d = data.frame(a = rnorm(10), b = rnorm(10))
      assign(paste0("product_",region), d)
    }
    

    <强>输出:

    数据集1:

                 a          b
    1  -1.63651631  0.7898706
    2   0.02038144 -0.2299939
    3   0.89174268 -0.8185025
    4  -0.87274968  0.4997342
    5   0.89005083  0.1591923
    6  -0.34387435  0.5426264
    7  -2.18678137 -0.1566451
    8   0.88005818  0.4387933
    9   0.72385656  1.4878706
    10  0.21985268  0.0601651
    

    数据集2:

                a          b
    1  -0.8490129  0.4534761
    2   2.3396931 -0.1234337
    3  -0.1212030 -0.7630968
    4  -1.9502074  0.2282701
    5   0.5387115  1.1194619
    6   1.6935148  0.1565732
    7  -0.7909682 -0.6887721
    8  -1.0752606  0.4529496
    9  -0.6078751 -1.0675467
    10  0.7544017  0.4015651