我正在尝试编写一个包含多个数据帧(超过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等。
答案 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