2009-10-25 10 views
5
R's stats私は R's statsパッケージを使用していますが、 all the rows of a dataframecolumn[x]をループし、関数で列の each cellのデータを操作し、その結果を新しい列に渡します( new columncalculated resultcolumn[x]のデータ)

Rの列をループする

私は2つの問題があります:

  1. 私は
  2. を動作させることができません。別の方法がありますか?そうでない場合、誰かがループを実行する方法の例を持っていますか?
+0

詳細をお知らせください。あなたが作業している問題の例と同じですか? – ariddell

+2

ループは必ずしも推奨されません。まずそれを稼働させてから、もっと速くなるかどうかについて考えてみましょう。 –

答えて

8

例がなくても、対応方法が分かりにくいです。あなたが記述しているものの基本的な場合は、しかし、このです:

#Just a very simple data frame 
dat <- data.frame(x = c(1, 2, 3)) 
#Compute the squared value of each value in x 
dat$y <- dat$x^2 
#See the resultant data.frame, now with column y 
dat 

あなたは、それは個別にそれぞれの値を二乗することを知っている(DAT $ xに同じように、またはベクトルのような構造)ベクトルを正方形にRを伝えるとき。たいていの場合、これらの値を明示的にループする必要はありませんが、Dirkが指摘しているように、ループの最適化について心配する必要があります。可能な場合は...

for(i in 1:length(dat$x)){ 
    dat$y[i] <- dat$x[i]^2 
} 

:それは言った、私は確かに

dat$y <- dat$x^2 

を読み書き好みます。

+0

ありがとうございます。私は算術演算をOKにすることができます。私はデータフレームの内容を関数に渡すことができません。ここに問題がある。ここに)私は(関数parse.smilesを使用したい見出しを持つ(データと呼ばれる)フレームのトップ「化合物」および「SMILES」(笑顔は、分子のテキスト表現です) Compound_ID SMILES 12345 c1cccccc1 するのです笑顔で読んで分子を出力する。もし私が1分子でそれを行うならば、OK(ジャンク< - "c1ccccc1"、parse。笑顔(ジャンク) 私は SP <行う場合 - get.smiles.parser() ジャンク< - sapply(データ$笑顔、parse.smiles、パーサ= SP)を それは大丈夫笑顔 – Andy

+0

を解釈することはできません。申し訳ありませんが、Rのどこにいたのかは分かりませんでしたので、基本的なケースをそこに投げると思っていました。 「不明」の場合もあるかもしれませんが、そうでない場合は、サンプルデータセットとその機能を投稿することをお勧めします。説明から間違っていることを理解するのは難しいですが、少なくとも、実験をしなくても機能を適用することはできません。 –

1

parse.smiles場合は、()あなたが「VEC」ベクトルのすべてのエントリに適用する機能です、そして、あなたが使用することができます。

lapply(1:length(vec),parse.smiles(vec[i])) 
+2

ありがとうございました。私が関心を持っていたコラムは、要素として読み込まれました。私は明示的にその内容を文字として読み込むように指示しなければならず、指摘されるまでこれを実現していませんでした。それは今働いている。 (上記の文字化けしたコメントのお詫び - 投稿時に消えた返品でフォーマットされました) – Andy

1

ループが推奨されて唯一の理由は、それがあるということですスロー。 Rは一度にベクトルに作用するように設計されており、これを達成するための多くの機能を備えています。全体に適用されるファミリと、Vectorizeのような機能が役立ちます。したがって、イディオムは、あなたがforループを使用している場合、Rで考えるのではなく、時にはforループが本当に適切であるということです。

これをRの考え方で行うには、関数をベクトル化していない場合は(Vectorize関数を参照)、その関数を引数として列全体を呼び出して、新しい列に代入します。

f<-Vectorize(function(x,...),'x') 
data$newcolumn<-f(data[,1]) 

適用ファミリ(apply、sapply、lapply、mapply、tapply)も選択肢です。ほとんどのネイティブR関数は既にベクトル化されていますが、ベクトルとして解釈される余分な引数を渡すときは注意が必要です。

関連する問題