これは些細なことだと思います。簡単な質問をして申し訳ありませんが、次の問題について助けていただければ幸いです。2 つの引数を必要とする関数があります。
myfun <- function(fm, name){
...
}
使用するデータ フレームは、関数内で取得できdat <- eval(fm$call$data)ます。内部datには、2 番目の引数と同じ名前の変数があります。つまり、変数がありますdat$name(関数の 2 番目の引数には、データフレームへの参照が含まれていないことに注意してください。つまり、名前は等しくdat$nameなく、単に ですname)。その変数を使用します。
Q: どうすればできますか?
具体例: 以下は一例です。
air <- data(airquality)
fm <- lm(Ozone ~ Solar.R, data=airquality)
myfun <- function(fm, name){
df <- eval(fm$call$data)
name[1:5]
}
myfun(fm, Temp)
この関数の目的は、nameフィッティングに使用されたデータフレーム内の変数の最初の 5 つの要素を表示することfmです。ただし、name対応するデータ フレームの変数として認識されません。でラップしてもwith(df, ...)、df$name同等のソリューションでもうまくいきません。どうすれば機能しますか?
編集: もう少し遊んでみましたが、まだ機能していません。これは、いくつかのコメントに触発された後、うまくいくはずだと思ったものです。
myfun <- function(fm, name){
df <- as.character(fm$call$data)
varname <- deparse(substitute(name))
d1 <- paste(df, "$", sep="")
d2 <- paste(d1, varname, sep="")
get(d2)[1:5]
}
myfun(fm, Temp)
これにより、 という文字列が生成されairquality$Tempますが、次のエラーが表示
Error in get(d2): object 'airquality$Temp' not found.
されgetます。 (