【发布时间】:2017-03-03 16:55:56
【问题描述】:
我有一个调用对象,我想添加一个参数,我不想像this answer does那样使用parse。
假设我有一个lm 对象,因此来自lm 的调用
lma <- lm(mpg ~ cyl, data=mtcars)
lma$call
# lm(formula = mpg ~ cyl, data = mtcars)
现在,假设我想使用调用添加一个参数weights=wt。我意识到有一种非常简单的方法可以创建一个新的调用,但我想知道我是否可以使用调用对象。如果weights 已经在其中,还有一种方法可以编辑它
lmb <- lm(mpg ~ cyl, data=mtcars, wei=wt)
cl <- lmb$call
wtpos <- which.max(pmatch(names(cl), "weights"))
cl[[wtpos]] <- mtcars$qsec
eval(cl)
但这不适用于lma$call,因为lma$call 中没有权重参数。
所以,感觉我应该能够通过添加另一个元素来简单地“增加”调用,但我不知道该怎么做。例如,以下失败:
cl <- lma$call
cl <- c(cl, weights=quote(wt))
eval(cl)
# [[1]]
# lm(formula = mpg ~ cyl, data = mtcars)
#
# $weights
# wt
所以,我希望结果是一个新的“lm”对象,等于lmb,而不仅仅是一个列表。
虽然有一种解决方法,但它不使用 parse(修改 lm 的副本以将 wt=weights 作为默认 similar to in this solution),这又不涉及编辑调用对象。
【问题讨论】:
标签: r