5

名前がベクトルであるいくつかのモデルをプログラムで評価しましたmodelsmtable次に、プログラムでそれらを呼び出して、それらで関数を使用するにはどうすればよいですか?

次に例を示します。

library(memisc)
a <- rnorm(100,0,1)
b <- rnorm(100,0,1)
c <- rnorm(100,0,1)
d <- rnorm(100,0,1)
mod1 <- lm(a ~ b)
mod2 <- lm(c ~ d)
models <- c("mod1", "mod2")
mtable(mget(models,envir=globalenv()))

その後、エラーが発生します:"no method available for 'getSummary' for an object of class 'list'"

私に何ができる?私は試しましたが、成功callしませんでした。do.call

4

3 に答える 3

5

なしmget()

do.call(mtable, lapply(models, as.symbol))
于 2012-10-23T22:26:37.097 に答える
3

使用do.call

do.call(mtable, mget(models,envir=globalenv()))
于 2012-10-23T22:23:49.973 に答える
1

他の答えも私には役に立ちましたが、ジョエルの特定の例に焦点を当てると、実験によって理解した一般的なポイントがわかりにくくなりました。これです:

可変数の引数を受け入れる関数が与えられた場合:

fvar <- function(...) {do something}

渡したい引数がすでにリストに含まれていると仮定します。

myargs <- list(a=1:3, b=c(2, 3, 4))

それらを個別に渡すことができます。例:

fvar(myargs[[1]], myargs[[2]])

ただし、これは、コードがリストの構造を知っている場合にのみ機能します。

do.call()リストにあるものはすべて、関数に与えられた一連の引数として渡すことができます。

do.call(fvar, myargs)

これはより一般的です。なぜなら、関数に適切であると想定できる限り、コードはリストの特定の構造が何であるかを理解する必要がないからです。

(ちなみに、do.call基本的にはCommon Lispと同じことをしapplyます。)

于 2013-01-05T19:04:51.757 に答える