0

なぜこれが機能しないのか理解できません。5列、n行のデータセットがあります。各行に関数を適用し、結果をn行1列のベクトルで返したいだけです。

すべてがどのように機能するかをテストするために、私はこの単純な関数を作成しました。

f1 <- function(uniqueid,Perspvalue,expvalue,stddevi,stddevc) {
    uniqueid+ Perspvalue- expvalue+ stddevi+stddevc
}

これが私のデータセットの最初の数行です。

> data
     uniqueid   Perspvalue    expvalue      stddevi      stddevc
1           1 2.404421e+03  3337239.00 8.266566e+03 3.324624e+03
2           2 1.345307e+03  3276559.87 7.068823e+03 2.648072e+03
3           3 1.345307e+03  3276559.87 7.068823e+03 2.648072e+03

これはデータフレーム(私は思う)であり、行列ではないことに注意してください。read.csvを使用してcsvからデータをロードしました。

だから私はこれを試してみます:apply(data,1,f1)

しかし、私の結果はこれです:Error in uniqueid + Perspvalue : 'Perspvalue' is missing

エラーではなく数値を期待していました。

4

1 に答える 1

7

mapplyこれに使用する必要があります。またはmdply、plyrパッケージからさらに便利に使用する必要があります。

いくつかのサンプルコード:

spam_function = function(a, b) {
  return(a*b)
}

require(plyr)
input_args = data.frame(a = runif(1000), b = runif(1000))
result = mdply(input_args, spam_function)
> head(result)
           a         b         V1
1 0.46902575 0.6865863 0.32202668
2 0.56837805 0.2400993 0.13646717
3 0.07185661 0.2334754 0.01677675
4 0.15589191 0.6636891 0.10346377
5 0.98317092 0.8895609 0.87459042
6 0.46070479 0.4301685 0.19818071

結果のベクトルが必要な場合:

result_vector = result$V1

または、次を使用したベースRソリューションmapply

result_mapply = mapply(spam_function, a = input_args$a, b = input_args$b)
> head(result_mapply)
[1] 0.2757767 0.1268879 0.5851026 0.7904186
[5] 0.2186079 0.1091692
于 2012-10-10T21:18:19.053 に答える