4

複数の実験に関連するファイルからデータをロードし、後でそれらを処理してプロットを生成する必要があります。各実験では、複数のファイルが生成されました。実験 1 に関連するファイルは、"Experiment1" という名前が付けられ、"Experiment1-per0"、"Experiment1-per50"、"Experiment1-per100" など、含まれるデータ型によって接尾辞が付けられます。

これらの接尾辞は、すべての実験で固定されています。したがって、ファイルをロードするには、実験名のみを指定し、後者は R スクリプトに接尾辞を追加します。その結果、「ExperimentX」という実験名ごとに、接尾辞を追加して 3 つの個別のデータ ファイルを読み込みます (つまり、「ExperimentX-per0」、「ExperimentX-per50」、「ExperimentX-per100」)。

どのデータ構造に最初の実験名を格納し、次に接尾辞付きの名前を格納する必要があるかわかりません。

サンプル ファイル (Experiment1-per50):

# the last column also shows the type of data i.e postfix of file

Obj TGiven  TUsed   TOGiven TOServed    per50

16570   8   7   12  6   per50

18430   8   8   12  9   per50

16890   8   7   12  9   per50

現在、すべてのファイル名を手動で入力しているため、時間がかかります。

4

2 に答える 2

2

各実験に同じサフィックスのセットがある場合は、実験名とサフィックス名のリストを別々に保存できます。次に、ネストされたループを使用して、関数を使用して実験名とサフィックス名を結合しpaste、ファイル名を取得できます。

コードは次のようになります。

experiments = c("Experiment1","Experiment2","Experiment3")
suffixes = c("per0","per50","per100")

for (experiment in experiments) {
  for (suffix in suffixes) {
    filename <- paste(experiment, suffix, sep="-")
    df <- read.table(filename)
    df$experiment <- experiment
    # Do something with the dataframe here
  }
}

あるいは、指定experimentsされたsuffixesリストからすべてのファイル名のベクトルが必要な場合は、これらを結合します。

as.vector(sapply(experiments, paste, suffixes, sep="-"))
于 2013-04-09T15:46:27.173 に答える
1

すべての列が異なる場合

列が実験間で異なる場合は、次のように実験をリストでラップします。

library(plyr);
experiments <- c("Experiment1","Experiment2","Experiment3");
suffixes <- c("per0","per50","per100");

# if you want to go ahead and get the data
data <- llply( experiments, function(experiment) {
    llply( suffixes, function(suffix) {
        fn <- str_c(experiment,'_',suffix,'.csv'); # make filename
        # later, try to read fn, now just return
        return(fn);
    })
})

dataその後、さらに処理を繰り返すことができます。パッケージllplyの一部です。plyrリストを反復処理し (最初lllply)、リストを返します (2 番目のl)。

すべての列が同じ場合

library(plyr);
experiments <- c("Experiment1","Experiment2","Experiment3");
suffixes <- c("per0","per50","per100");

data <- ldply( experiments, function(experiment) {
    ldply( suffixes, function(suffix) {
        data.frame(
           experiment = experiment,
           suffix= suffix,
           fn = str_c(exper.name,'_',suffix,'.csv'))
    })
})

これにより、すべてのデータが単一の として読み取られ、data.frame必要に応じて解析できます (たとえば、plyrand/orを使用subset)。

于 2013-04-09T16:16:40.917 に答える