2016-11-24 6 views
2

私は、それぞれが異なる長さ(約6000の平均長さ)の他のリストによって構成された1000要素のリストを持っています。私はそれを.csvファイルまたは.txtファイルに保存する必要があります。非常に大きなオブジェクトなので、ここでは簡単な例を通して問題を示します。ファイルに保存する方法長さの異なる要素のリスト

順番に次のように、4と6の要素で構成され、それぞれ2つのリストで構成され、リストの次のリスト、考える:私は.CSVに、リストのこのリストを保存する必要が

[[1]] 
[[1]][[1]] 
[1] 7 3 5 4 8 

[[1]][[2]] 
[1] 5 7 8 

[[1]][[3]] 
[1] 1 5 

[[1]][[4]] 
[1] 6 


[[2]] 
[[2]][[1]] 
[1] 1 7 3 4 5 9 

[[2]][[2]] 
[1] 5 9 2 1 

[[2]][[3]] 
[1] 6 2 4 

[[2]][[4]] 
[1] 6 1 

[[2]][[5]] 
[1] 5 9 

[[2]][[6]] 
[1] 6 

をか好ましくは最初の2つの数字は次のように、リストの順番を指し、たとえば、リスト番号の参照を維持するために.txtファイル:

1, 1, 7, 3, 5, 4, 8 
1, 2, 5, 7, 8 
1, 3, 1, 5     
1, 4, 6 

2, 1, 1, 7, 3, 4, 5, 9 
2, 2, 5, 9, 2, 1 
2, 3, 6, 2, 4 
2, 4, 6, 1 
2, 5, 5, 9 
2, 6, 6 

が、私はそれを行うことができる方法について誰のアイデアを持って?再現可能な形式のデータは次のとおりです。

mylist <- list(list(c(7, 3, 5, 4, 8), c(5, 7, 8), c(1, 5), 6), list(c(1, 
7, 3, 4, 5, 9), c(5, 9, 2, 1), c(6, 2, 4), c(6, 1), c(5, 9), 
    6)) 
+0

あなただけが 'saveRDS'と' readRDS' – Rentrop

+0

を使用することができますRでそれを再利用する場合、私はあなたのポストに再現性のあるデータを追加しました。次回は、 'dput'関数の結果を使ってデータを再現可能な形式で作成してください。 –

+0

私は "CSVまたは好ましくはテキスト"で明確ではありません - 上記の推奨されたフォーマットでは、これらの2つのファイルタイプの間の唯一の違いは拡張子です(ファイルの内容ではなくファイルの名前) –

答えて

2

ここは例です。 (ccat()は、あなたの代わりにfile=""ccatを定義した場合、これは代わりに、コンソールに出力します。それはタイピングの少しを保存するだけのヘルパー関数です、本当に必要はありません。)

ccat <- function(...,file="myfile.txt") { 
    cat(...,file=file,append=TRUE)     
} 
for (i in seq_along(mylist)) { 
    for (j in seq_along(mylist[[i]])) { 
     ccat(i,j,mylist[[i]][[j]],sep=", ") 
     ccat("\n") 
    } 
    ccat("\n") 
}          
+0

わかりませんこれは関数 'ccat'の引数であり、2つのforループの前に宣言されなければならない場合です。 –

+0

が解決されました..... –

+0

ファイルの出力が空です。 –

0

たぶんthis-

のようなもの
mylist <- list(list(c(7, 3, 5, 4, 8), c(5, 7, 8), c(1, 5), 6), 
      list(c(1, 7, 3, 4, 5, 9), c(5, 9, 2, 1), c(6, 2, 4), c(6, 1), c(5, 9), 6)) 

output <- NULL 
count <- 1L 
output <- plyr::ldply(lapply(mylist, function(x) 
      { 
      return(cbind(count,seq(x),plyr::ldply(x,rbind))) 
      count <<- count + 1 
      })) 

#Then write the output as a csv file 
write.csv(output, file = "output.csv") 
1

lapply()をネストしたwriteLines()を考えてください。以下は、ファイルに書き込み、メモリにnewlistオブジェクトを作成し、対応する:

file <- "/path/to/myfile.txt" 
conn <- file(description=file, open="w") 

newlist <- lapply(seq_len(length(mylist)), function(i){ 

    lapply(seq_len(length(mylist[[i]])), function(j) { 
     temp <- c(i, j, mylist[[i]][[j]]) 
     writeLines(text=paste(temp, collapse=","), con=conn, sep="\r\n") 
    }) 

}) 
close(conn) 
+1

書き込み呼び出しに 'append = TRUE'が必要ですか? –

+0

@ 42-docs show writeLines()は* append * argを使用しません。 – Parfait

+0

次に、接続オプションを正しく設定します。 –

関連する問題