2016-10-01 9 views
-1

Gross LossはDatasetOneの列ですが、DatasetTwo、Threeなどの列です 年齢はDatasetOneの列ですが、などrでfunct()とaggregate()を使用し、間違ったデータセットを選択する

DatasetTwo、三、でこれは私がこの関数を作ると、私は

sample <- ag(GrossLoss, Age, mean, DatasetOne) 

を行うことは、「evalの中のエラー(exprの、ENVIR、ENC言う

ag <- function (x,y,z,d) 
{ 
aggregate(x ~ y, FUN=z, data=d) 
} 

を使用した関数でありますロス):オブジェクトのGrossLoss「私は(DatasetOneを取り付け使用する場合固定されている「 が見つかりません)

は、だから私は

ag <- function (x,y,z,d) 
{ 
attach(d) 
aggregate(x ~ y, FUN=z, data=d) 
detach(d) 
} 

に機能を変更しかし、その代わりにデータを作成するので、それは/値を作成します環境

どうすれば解決できますか?それは、私が プロット(..、データ= d) のための関数を作成しようとすると、同じことが正しく機能していない "データ="ビットのようです。

答えて

2

我々はpasteformula

ag <- function (x,y,z,d){ 
    aggregate(as.formula(paste(x, y, sep="~")), data=d, FUN = z) 
} 

を使用して、あなたもこれを行うことができます

ag('GrossLoss', 'Age', mean, DatasetOne) 
0

関数を呼び出す必要があります。 match.callは、関数内のすべての引数を評価します。次に、データフレームdを使用するように評価することができます。

ag <- function (x,y,z,d) 
{ 
    arguments <- as.list(match.call()) 
    x = eval(arguments$x, d) 
    y = eval(arguments$y, d) 
    aggregate(x ~ y, FUN = z, d)  
} 

その後、コールは次のようになります。

ag(x, y, mean, d) 
関連する問題