0

私の例が合理的かどうか尋ねないでください。私の質問を回避する方法の例があるかもしれませんが、data.frame にグループごとに適用する必要がある無名関数に複数のパラメータを渡すことはできないかもしれません。

私はdata.frameを持っています

w <- c("A", "B")
x <- c(1,2)
y <- c(3,4)

df <- data.frame(w,x,y)

ここで、列 x と y を乗算して列 z を作成する関数を各グループ (列 w で定義) に適用したいと考えています。

df$z <- ...(list(df$x, df$y), df$w, FUN=関数(x,y) {x * y}

実際、私は乗算の具体的な答えを求めているのではなく、無名関数に 2 つ以上のパラメーターを適用する方法の構文を求めています。

Joshua からの正しいコメントにより、例を変更しました。tapply はリストでは機能しません。

ヒントをいただければ幸いです

トム

4

2 に答える 2

4

私があなたを正しく理解していれば、これは1つの方法です:

do.call(mapply, c(function(x, y) x * y, df[-1]))
# [1] 3 8

data.frame(たとえば、ID 列を削除した後の) 列の数は、無名関数の引数の数と一致する必要があります。

または、列を明示的に指定する場合:

mapply(function(x,y) x * y, df$x, df$y)
于 2013-11-05T16:31:37.750 に答える
2

Reduce組み込み関数を asまたはapplywith のいずれか*で使用できるのに、匿名のユーザー定義関数を使用する理由がわかりませんprod。このdata.frameを考慮する:

  w x y
1 A 1 3
2 B 2 4
3 A 3 6
4 A 4 1
5 B 5 2

> Reduce("*", df[,-1])
[1]  3  8 18  4 10

> apply(df[,-1], 1, prod)
[1]  3  8 18  4 10
于 2013-11-05T16:23:52.010 に答える