1

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ご協力いただきありがとうございます。

4

2 に答える 2

1

私があなたの目標を正しく理解していれば、2 つのステップ:

  1. リスト項目に名前を追加します。
  2. を使用してワークスペースにオブジェクトを作成します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
于 2013-10-04T19:05:38.823 に答える
1

要素をリストに保持する必要がありますlapply。副作用を避けるために使用することをお勧めします。たとえば、次のようなことを試してください。

 lapply(a1,write.csv)

EDIT追加フローデルの回答:

filenames <- paste0(seq_along(a1), ".csv")
mapply(write.csv, a1, file = filenames)
于 2013-10-04T19:15:12.087 に答える