这相当棘手:
m <- match.call(expand.dots = FALSE)
# ...
m[[1L]] <- as.name("model.frame")
m <- eval(m, parent.frame())
函数使用
match.call
若要了解如何调用,请修改调用以将被调用函数替换为
model.frame
,并通过
eval
使用接收到的参数(尽管第一部分被替换为
# ...
删除几个参数),以及
模型框架
使用
formula
参数。参见以下文件:
打电话
,
埃瓦
和
模型框架
尝试一下,例如,试着理解这里发生了什么:
f <- function(formula, data) {
m <- match.call()
m[[1L]] <- as.name('model.frame')
eval(m, parent.frame())
}
f(x ~ y)
Error in eval(expr, envir, enclos) : object 'x' not found
x <- c(1,2,3)
f(x ~ y)
Error in eval(expr, envir, enclos) : object 'y' not found
y <- c(3,4,5)
f(x ~ y)
x y
1 1 3
2 2 4
3 3 5
d <- as.data.frame(matrix(c(1,2,3,4),nrow=2))
names(d) <- c('foo', 'bar')
f(foo ~ bar, d)
foo bar
1 1 3
2 2 4