我在R中遇到一些问题。我在R中有这个列表a1
> a1
[[1]]
x1 x2 x3
1 1 1 1
2 2 2 2
3 2 2 2
4 13 13 13
5 12 12 12
6 23 23 23
7 12 12 12
[[2]]
x1 x2 x3
1 2 2 2
2 2 2 2
3 2 2 2
4 13 13 13
5 12 12 12
6 23 23 23
7 12 12 12
[[3]]
x1 x2 x3
1 3 3 3
2 2 2 2
3 2 2 2
4 13 13 13
5 12 12 12
6 23 23 23
7 12 12 12
我的问题是我无法将所有元素都提取为数据框。例如,我使用此代码将它们作为数据框提取,但我收到此错误:
for(i in c(1:3))
{
paste("a",i)=as.data.frame(a1[i])
}
Error in paste("a", i) = as.data.frame(a1[i]) :
target of assignment expands to non-language object
我的问题是该列表有20个元素,当我放a1=as.data.frame(a1[1])
它有效但我必须编写许多行,因为显示的for
代码不起作用。谢谢你的帮助。
答案 0 :(得分:1)
如果我正确理解了您的目标,请执行以下两个步骤:
list2env
在工作区中创建对象。以下是一个例子:
mylist <- list(data.frame(matrix(1:4, ncol = 2)),
data.frame(matrix(5:8, ncol = 2)),
data.frame(matrix(9:12, ncol = 2)))
names(mylist) <- LETTERS[seq_along(mylist)]
mylist
# $A
# X1 X2
# 1 1 3
# 2 2 4
#
# $B
# X1 X2
# 1 5 7
# 2 6 8
#
# $C
# X1 X2
# 1 9 11
# 2 10 12
A
# Error: object 'A' not found
list2env(mylist, envir=.GlobalEnv)
# <environment: R_GlobalEnv>
A
# X1 X2
# 1 1 3
# 2 2 4
答案 1 :(得分:1)
您应该将元素保留在列表中,最好使用lapply
来避免副作用。尝试类似这样的事情:
lapply(a1,write.csv)
编辑添加flodel答案:
filenames <- paste0(seq_along(a1), ".csv")
mapply(write.csv, a1, file = filenames)