0

非常によく似た名前(df1、df2、.. df7)を持つdata.framesを使用しています。ほとんどの分析は全部で行われるので、可能な限りプロセスを自動化したいと思います。私はすでにファイルを読むときにassignを使用することができました:

for(i in 1:7) { 
  NameFile <- paste("df",i,"_10/score.out", sep="")
  OutFile <- read.table(NameFile, na.string="NA",header=TRUE,sep="\t")
  NameVar <- paste("df",i,"_10", sep="")
  assign(NameVar, OutFile)
  }

でも今は全部でも操作・機能をやりたいです。たとえば、サブセット化:

for(i in 1:7) {
              Newname <- paste("dfsmall",i,sep="")
              dftemp <- subset(df[i], p == 0   & abs(sepscore) > 0.3)
              assign(Newname, dftemp)
              }

ほとんどが正しいと思いますが、df [i]を呼び出すにはどうすればよいですか?つまり、df1、df2(..)という名前で既に存在するオブジェクト?そして、これを行うためのよりクリーンな方法はありますか?

ここには似たような質問がいくつかありますが、私の問題に適した質問はありません。それからまた、私は明白なものを見逃しがちです。

ありがとう。

4

2 に答える 2

5

関数を使用することによりget(同じように機能しますassignが、逆に機能します):

 for(i in 1:7) {
          get(paste("df",i,"_10",sep="")) -> df
          Newname <- paste("dfsmall",i,sep="")
          dftemp <- subset(df, p == 0   & abs(sepscore) > 0.3)
          assign(Newname, dftemp)
          }
于 2012-07-03T14:19:10.070 に答える
3

何らかの理由で10個のコンポーネントがあるという分析があるとしましょう。私はそれらdf1を呼び出すのではなくdf10、リストで並べ替えます。

data_list = list(exp1 = data.frame(...), 
                 exp2 = data.frame(...), 
                 ..., 
                 exp10 = data.frame(...))

すべての実験の操作を実行するには、要素のデータを指定して、操作を実行する関数を作成する必要があります。

do_stuff = function(experiment_data) {
   # do something
 }

applyこの場合、スタイルループを使用しlapplyます。

result = lapply(data_list, do_stuff)

このアプローチははるかに簡単だと思います。

于 2012-07-03T14:21:23.117 に答える