编写包含多个数据帧的列表

时间:2014-06-12 16:34:37

标签: r

我正在尝试编写一个包含多个数据帧(超过200个数据帧)的列表,为此我使用以下语法:

> list.name <- list(ls(pattern="dfname*"))

这让我创建一个带有多个对象的list.name,当我尝试打印列表的内容时没有问题

> list.name
[[1]]
[1] "dfname1" "dfname2" "dfname3" "dfname4" "dfname5"
.....
[200] "dfname200" "dfname201" "dfname202" ....

但是,当我尝试在列表list.name中查看特定数据框时,我看不到数据框值,例如

> list.name[[5]]
Error en list.name[[5]] : subíndice fuera de  los límites (subscript out of range)

> list.name[2]
[[1]]
NULL

我需要构建一个列表,让我可以执行其他操作,例如查看每个数据帧的str,并将每个数据帧导出到csv等。

你可以给我一些建议吗?提前谢谢!

3 个答案:

答案 0 :(得分:1)

ls()将返回一个带有匹配data.frames名称的字符向量。如果您确实想要创建data.frames列表,则应使用

dflist <- mget(ls(pattern="dfname*"))

或者如果你只是想要这些名字,我不要把它保存在矢量形式而不是转换成列表

list.name <- list(ls(pattern="dfname*"))

然后你可以用

提取每个名字
list.name[1]

而不是使用双括号语法。在这种情况下,实际上不需要列表。

答案 1 :(得分:0)

您只需创建一个长度为1的列表,其中包含200个名称的向量。您还没有自己存储数据框。要实际创建所有数据框的列表,可以尝试

lists <- lapply(ls(pattern="dfname*"), get)

答案 2 :(得分:0)

您正在从对象名称的字符向量中创建一个列表。您希望get()每个名称后面的对象并从中创建一个列表。在这种情况下,您希望mget()函数一次从其名称中获取大量对象。这将返回一个列表

## dummy data
dfname1 <- dfname2 <- dfname3 <- data.frame(A = 1:3, B = LETTERS[1:3])

dfnames <- ls(pattern="dfname*")
list.name <- mget(dfnames)
str(list.name)

> str(list.name)
List of 3
 $ dfname1:'data.frame':    3 obs. of  2 variables:
  ..$ A: int [1:3] 1 2 3
  ..$ B: Factor w/ 3 levels "A","B","C": 1 2 3
 $ dfname2:'data.frame':    3 obs. of  2 variables:
  ..$ A: int [1:3] 1 2 3
  ..$ B: Factor w/ 3 levels "A","B","C": 1 2 3
 $ dfname3:'data.frame':    3 obs. of  2 variables:
  ..$ A: int [1:3] 1 2 3
  ..$ B: Factor w/ 3 levels "A","B","C": 1 2 3

list.name[[ dfnames[1] ]]

> list.name[[ dfnames[1] ]]
  A B
1 1 A
2 2 B
3 3 C