これは些細なことだと思います。簡単な質問をして申し訳ありませんが、次の問題について助けていただければ幸いです。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
ます。 (