在循环中检索和打印不同数据帧的部分

tna*_*bdb 0 r

我有 100 个名称为 pattern 的数据框product_<region>。这些名称存储在 vector 中names

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

我试过了

for (name in names) {
  print(paste0("product_", name), n = 10)
}
Run Code Online (Sandbox Code Playgroud)

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

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

coa*_*ess 5

问题

  1. 避免使用,names因为它与names(x).
  2. 用于get(x)从文本字符串中检索变量。
  3. 最后, print()不是有一个n=参数。相反,使用head(x)来查看data.frame第一个n = 6L观察结果(或tail(x)最后一个观察结果n = 6L)。

print(x, n=10)作为结果的使用然后触发:

print.default(m, ..., quote = quote, right = right) 中的错误:

无效的“na.print”规范

建议的解决方案

for (region in regions) {
  print(head(get(paste0("product_", region)), n = 10))
}
Run Code Online (Sandbox Code Playgroud)

测试数据

生成一些示例数据:

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)
}
Run Code Online (Sandbox Code Playgroud)

输出:

数据集 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
Run Code Online (Sandbox Code Playgroud)

数据集 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
Run Code Online (Sandbox Code Playgroud)