2

私はRでこの問題にしばらく苦労してきました:

for9つのデータファイルを実行するループがあるとしましょう。このループでは、長いベクトルから短いベクトルを抽出します。簡単。

その後、まだループ中に、抽出したばかりの短いベクトルで行列を埋めて、行列をファイルに保存したいと思います。短いベクトルはどれも同じ長さではないため、簡単ではありません。.csvこの問題を回避するために、とを使用してベクトルをファイルに直接(ループ内で)直接保存しようとしましたwrite.table()append=TRUE、9列にしたい場合は、Rが同じ列の9個のベクトルすべてを追加します。何かのようなものby.column=TRUEが存在しますか?

どういうわけか、データファイルの9列に9つの短いベクトルだけを入れたいのです。私は2番目の解決策にそれほど遠くないように見えます。

この小さなプログラムを最終的に終了する方法を誰かが考えていますか?よろしくお願いします。

お時間をいただきありがとうございますミシェル

4

1 に答える 1

1

次のようにして、ワークフローを少し調整することをお勧めします。

  1. まず、すべてのベクトルを1つのRリストオブジェクトに収集します。

  2. まだR内で、ベクトルのリストを行列またはdata.frameにマッサージします。(すべてのベクトルを抽出し、最も長いベクトルの長さがわかれば、これは簡単になります。)

  3. write.table次に、またはへの1回の呼び出しで、結果のテーブルを書き出しますwrite.csv

次に例を示します。

## Set up your for() loop or lapply() call so that it returns a list structure 
## like 'l'
l <- list(a=1:9, b=1:2, c=1:5)

## Make a matrix from the list, with shorter vectors filled out with ""s
n <- max(sapply(l, length))
ll <- lapply(l, function(X) {
    c(as.character(X), rep("", times = n - length(X)))
})
out <- do.call(cbind, ll)                 

## Then output it however you'd like. (Here are three options.)
# write.csv(out, file="summary.csv")
# write.csv(out, file="summary.csv", quote=FALSE)
# write.table(out, file="summary.txt", row.names=FALSE, quote=FALSE, sep="\t")
于 2012-09-28T17:05:13.670 に答える