0

私のUDF:

testfn = function(x1, x2, x3){
if(x1 > 0){y = x1 + x2 + x3}
if(x1 < 0){y = x1 - x2 - x3}
return(y)
}

私のサンプルテストセット:

test = cbind(rep(1,3),c(2,4,6),c(1,2,3))

適用の実行:

apply(test, 1, testfn, x1 = test[1], x2 = test[2], x3 = test[3])

これは私が得るエラーです:

FUN(newX[, i], ...) のエラー: 未使用の引数 (newX[, i])

UDF がテスト セットを行ごとに評価するには、apply をどのように使用すればよいですか?

私は期待しています:

[1] 4 7 10

より複雑な UDF を使用する必要があるため、簡略化された一般化された UDF を提供しました。

4

1 に答える 1

0

関数を直接apply

apply(test, 1, function(x) if(x[1] > 0) sum(x) else x[1] - x[2] - x[3])

[1]  4  7 10

UDF を使用する場合は、それを変更する必要があります。

testfn = function(mydf){
  if(mydf[1] > 0){y = mydf[1] + mydf[2] + mydf[3]}
  if(mydf[1] < 0){y = mydf[1] - mydf[2] - mydf[3]}
  return(y)
}

apply(test, 1, testfn)
于 2015-05-05T16:03:49.617 に答える