1

R環境のすべてのデータフレームに同じ形式の列を追加したいと思います。次のような簡単な割り当てで、必要な列を作成できます。

x[,8] <- x[,4]/(x[,4]+x[,5])

これを環境内のすべてのオブジェクトを反復処理するforループに入れようとすると、エラーが発生します。

control_data <-ls()

for(i in control_data){(i [、8] <-i [、4] /(i [、4] + i [、5]))}

エラー:予期しない'[' in "for(i in control_data){["

入力ファイルは次のようになります。

ENSMUSG00000030088  Aldh1l1 chr6:90436420-90550197  1.5082200   3.130860    0.671814    0.0000000
ENSMUSG00000020932  Gfap    chr11:102748649-102762226   7.0861500   44.182700   20.901700   0.2320750
ENSMUSG00000024411  Aqp4    chr18:15547902-15562193 3.4920400   3.474880    2.463230    0.0331238
ENSMUSG00000023913  Pla2g7  chr17:43705046-43749150 1.5105400   24.275600   11.422400   1.5111100
ENSMUSG00000035805  Mlc1    chr15:88786313-88809437 1.9010200   7.147400    5.313190    0.6358940
ENSMUSG00000007682  Dio2    chr12:91962993-91976878 1.7322900   12.094200   6.738320    1.0736900
ENSMUSG00000017390  Aldoc   chr11:78136469-78141283 55.4562000  199.958000  91.328300   22.9541000
ENSMUSG00000005089  Slc1a2  chr2:102498815-102630941    63.7394000  130.729000  103.710000  10.0406000
ENSMUSG00000070880  Gad1    chr2:70391128-70440071  2.6501400   14.907500   13.730200   1.3992200
ENSMUSG00000026787  Gad2    chr2:22477724-22549394  3.9908200   11.308600   28.221500   1.4530500

あなたが提供できるどんな助けにも感謝します。適用関数を使用してこれを行うためのより良い方法はありますか?

4

1 に答える 1

2

コメントで述べたように、呼び出しの結果はlsオブジェクト自体ではなく、文字列としての名前であるため、エラーが発生します。

forループを使用するには、eval(parse(...))パスをたどります。と関数を使用してこれを行うこともできapplyます。

myfun <- function(x) {
  df <- get(x)
  df[,8] <- df[,4] / (df[,4] + df[,5])
  return(df)
}

control_data <- ls()

lapply(control_data, myfun)

コメントによると:

for(i in control_data) {
  df <- get(i)
  df[,8] <- df[,4] / (df[,4] + df[,5])
  assign(i, df)
}
于 2012-06-19T20:19:40.497 に答える