2016-05-17 6 views
0

私はカスタム関数を書こうとしています。私は、作業コード持っている:私は、カスタム関数にそれを書き込もうとしましたカスタム関数を書く:eval(expr、envir、enclos)のエラー:オブジェクトが見つかりません

m <- lm(age ~ religion * degree * country + gender, WVS) 
e_df <- data.frame(e <- effect("religion:degree:country", m)) 
e_df$predictor <- paste(e_df[,3], e_df[,2], e_df[,1], sep="\n\n") # merge first three columns 
ifelse(names(e_df)=="fit", "age", names(e_df))->names(e_df) # rename column 1 
print(subset(e_df, select = c(predictor, age, se)), digits = 3) 

を:

threewaycovar<- function(outcome, V1, V2, V3, covar, d) 
{require(effects) 
m <- lm(outcome ~ V1 * V2 * V3 + covar, d) 
e <- effect("V1:V2:V3", m) 
e_df <- data.frame(e) 
e_df$predictor <- paste(e_df[,3], e_df[,2], e_df[,1], sep="\n\n") # merge  first three columns 
ifelse(names(e_df)=="fit", "outcome", names(e_df))->names(e_df) # rename column 1 
op <-(subset(e_df, select = c(predictor, outcome, se))) 
return(op)} 

ただし、カスタム関数がでてくれ

「エラーをエラーメッセージを与え続けますeval(expr、envir、enclos):オブジェクト 'outcome'が見つかりません "。

このエラーメッセージが表示される理由はわかりません。 私はこの記事Error in eval(expr, envir, enclos) - contradiction?を見て、結果に関係なく、私の機能はまだ動作していない列番号への参照を取り出した

threewaycovar(WVS$age, WVS$religion, WVS$degree, WVS$country, WVS$gender, WVS) 

を使用してそれを実行しようとしました。誰かが私の機能がなぜ機能していないのか教えていただけますか?

コメントの編集編集: WVSはRに含まれるデフォルトのパッケージであり、私のデータは再現可能です。私のトレースバックは、私は私に少なくとも一つの共同変量のための制御三方相互作用のための推定手段と標準誤差を与える機能するようにしようとしています

14 eval(expr, envir, enclos) 
13 eval(predvars, data, env) 
12 model.frame.default(outcome ~ V1 * V2 * V3 + covar + (V1 + V2 + 
V3 + covar), data = structure(list(poverty = structure(c(1L, 2L, 1L, 3L, 1L, 2L, 3L, 1L, 1L, 1L, 1L, 2L, 1L, 3L, 1L, 3L, 3L, 1L, 2L, 2L, 3L, 3L, 1L, 1L, 1L, 1L, 1L, 1L, 3L, 2L, 1L, 3L, 1L, ... 
11 model.frame(outcome ~ V1 * V2 * V3 + covar + (V1 + V2 + V3 + 
covar), data = structure(list(poverty = structure(c(1L, 2L, 1L, 3L, 1L, 2L, 3L, 1L, 1L, 1L, 1L, 2L, 1L, 3L, 1L, 3L, 3L, 1L, 2L, 2L, 3L, 3L, 1L, 1L, 1L, 1L, 1L, 1L, 3L, 2L, 1L, 3L, 1L, 1L, ... 
10 eval(expr, envir, enclos) 
9 eval(call("model.frame", ff, data = data, subset = subset, na.action = naa), 
envir) 
8 expand.model.frame(mod, all.predictors) 
7 na.omit(expand.model.frame(mod, all.predictors)) 
6 Analyze.model(focal.predictors, mod, xlevels, default.levels, 
formula.rhs, partial.residuals = partial.residuals, quantiles = quantiles, 
x.var = x.var, data = data, typical = typical) 
5 Effect.lm(predictors, mod, vcov. = vcov., ...) 
4 Effect(predictors, mod, vcov. = vcov., ...) 
3 effect.default("V1:V2:V3", m) 
2 effect("V1:V2:V3", m) 
1 threewaycovar(WVS$age, WVS$religion, WVS$degree, WVS$country, 
WVS$gender, WVS) 

です。上記は私がこれまで試みてきたものです。

+1

あなたの問題を[再現可能]にするためのサンプル入力データを提供する必要があります(http://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-example)。あなたを助けること。 'traceback()'の出力は、どの関数がエラーを投げているのかを知るのに便利です。どのように試みたかを示すだけでなく、何をしようとしているのかを記述する方が良いでしょう。あなたのコメントはありがたいですが、私はまだあなたのコメントをお寄せいただきありがとうございます。 – MrFlick

+1

'ifelse(名前(e_df)=="フィット "、"結果 "、名前(e_df))→名前(e_df)' – HubertL

+0

同じエラーメッセージ。 – Jim

答えて

3

主な問題は、式や式に変数を投げることができないことです。ここでは、列名をベクトル値ではなく文字列として渡す関数の書き直しがあります。

ここでは、公式を文字列として作成し、データセットの元の名前を保持します。

関連する問題