2016-09-26 1 views
0

Rは比較的新しいですが、従来のプログラミング言語(C、Javaなど)で経験しました。私は最近、私が実際に分析していたときと同じくらい多くの時間を費やしていたので、その1つのタスクに多くの時間を費やしていたという状況に遭遇しました。私は少し時間を過ごしていましたが、私が直接関連性があると判明した解決策には及ばなかった(私は何かを見逃しているかもしれない、私はそんなに辛抱している)。それにもかかわらず、誰かが同様の状況で自分自身を見つけた場合に私がコミュニティと分かち合おうと思っていた私の問題に対する簡単な解決策を考え出しました。Rスクリプト、プログラムで複数のCSVファイルをデータフレームのリストとしてバッチインポート(ソリューション)

背景情報:私が分析しているデータは、リアルタイムのデータフィードによって駆動される(つまり、複雑な)実験システムのリアルタイムのパフォーマンスと診断指標です。結論は、試行の間にファイル名は変わらず、データはCSVファイルに直接書き出されます(私はロギングコードを書いたので、私のような親友になります)。 1回の試行で数十種類のファイルが生成されており、今後数百回の試行を予定しています。

私はいくつかのアイデアを持っていたし、コードの周りビットを再生した後、私は、次の解決策を考え出した:

# Create mapping that associates files with a handle that the loader will use to 
# generate a named list of data frames (don't even try this on the cmdline) 
createDataFileMapping <- function() { 
    list(
    c(file = "file1.csv", descr = "descriptor1"), 
    c(file = "file2.csv", descr = "descriptor2"), 
    ... 
) 
} 

# Batch load csv files and return as list of data frames 
loadTrialData <- function(load.dir, mapping) { 
    dfList <- list() 
    for (item in mapping) { 
    file <- paste(load.dir, item[["file"]], sep = "/") 
    df <- read.csv(file) 
    dfList[[ item[["descr"]] ]] <- df 
    } 

    return(dfList) 
} 

の起動はloadTrialData("~/data/directory", createDataFileMapping())と同じくらい簡単です。

私はこの問題を解決する他の方法があると確信していますが、上記のように私の場合は仕事が終わってしまいます。私はこれが地球環境のデータフレームにファイルを直接ロードするよりもわずかにメモリ効率が良いと確信しています。個々のデータフレームを解析/プロット関数に渡す構文はそれほどエレガントではありませんが、私は好きではない。より柔軟性の高い/一般化可能なソリューションをお持ちの場合は、お気軽に投稿してください!

+0

ここではっきりと答えるプログラミングの質問はないので、この記事は[codereview.se]の方がStack Overflowよりも適しているようです。 – MrFlick

+0

おそらく、私はこの問題や似たような問題で助けを求めている人が意見を異にするかもしれないと思うかもしれません。スタックオーバーフローは、トラフィックの多いヘルプの宛先です。ここでのポスティングのポイントは、最も効果的な場所に情報を配置することです。それは "従来の"知恵と一致していない場合はそれもそうです。そして、確かに、私はそれについてもブログします。 –

答えて

0

サウンドで持っている何を、私は2つだけ、コメントを追加します。

  • データフレームは、あなたがそれらを置くあまり失うことはありません自明の大きさであると仮定すると、余分なメモリ使用量を心配しないでください大きなリストあなたの関数の引数として...を追加し、別のユーザーがそのファイルがまったく同じ形式ではありませんでしたので、追加の引数を指定する必要があります(またはstringsAsFactors=FALSEか何かを望んでいる)場合ように、read.csvにそれを通過する可能性がある

  • 彼らはそれを行う柔軟性を持っています。

関連する問題