2017-02-15 5 views
1

* apply関数は、データ処理時にループするよりも効率的な方法ですが、1つの定期的な状況ではそうするのが苦労しています。すなわちcellValue(正規化した値で6:私は単に指定された列のための2を各セルの値を置き換えたい...「myTNorm」このdata.frameためループの問題と適用

> str(myTNorm) 
'data.frame': 4631 obs. of 12 variables: 
$ nc101_code: chr "NC101_00003" "NC101_00004" "NC101_00005" "NC101_00006" ... 
$ D2_01  : num 5.67e-04 5.17e-05 2.50e-04 8.79e-04 8.61e-06 ... 
$ D2_02  : num 1.83e-04 1.26e-05 3.35e-04 5.05e-04 1.89e-05 ... 

:この単純な例を見てみましょう/ sum(列))。

これをうまくやるためにいくつかの関数で* applyを使う良い方法があるはずですが、forループとしてしか使えないような気がします。誰かが適切な構文を共有してください!

for (i in 2:6) 
{ 
    myTNorm[, i] = myTNorm[, i]/sum(myTNorm[, i]) 
} 

ありがとうございます!

+0

あなたがループ対の記事を見て回る*質問を適用した場合、あなたはコメントや*メソッドを適用することを示しても、完全な例の多くを見ることができます常にため 'よりも良いではありません'ループ。あなたの質問のために、 'myTNorm [、2:6] --application(2:6、function(i)i/sum(i))はおそらく標準*適用ソリューションです。 – lmo

+1

@Imo 2番目の部分は 'lapply(myTNorm [、2:6]、...)' – Shape

+0

@Shapeでなければならないと思います。それをキャッチするためにありがとう。 – lmo

答えて

0

私はこのような良いチュートリアルを読むことをお勧めします:https://www.r-bloggers.com/using-apply-sapply-lapply-in-r/。あるいは、ここで質問をする前に、同様の答えを見つけて自分のコードを修正してみてください。

しかし、あなたは試すことができます:

apply(X = myTNorm[,2:6], MARGIN = 2, FUN = function(x) x/sum(x))