如何使用在 R 中列为字符串向量的参数构建函数?
How to build a function with arguments listed as a string vector in R?
我如何编写一个接受字符串向量的函数和 returns 一个带有字符串向量名称参数的函数?此外,我想使用我的参数字符串来创建一个 list
或 data.frame
,该函数以该函数内的输入列命名。我想要的应用程序是能够将其传递给 predict
方法来估计一些点。如果这个功能已经存在,请告诉我。否则,我很好奇我怎么写。下面我包含了 R 伪代码,说明了我正在尝试做的事情,并希望展示我在概念上遇到的困难。
make_fitting_function <- function(mod) {
x <- xterms(mod)
function(!! x) {
predict(mod, newdata = list(!! x))
}
}
调用此函数returns 一个可以在单独的向量参数上调用的函数。例如:
f <- make_fitting_function(lm(mpg ~ wt, data = mtcars))
f(wt = c(1, 2, 3, 4, 5))
结果将是:
1 2 3 4 5
31.94 26.60 21.25 15.91 10.56
然而,这也适用于更多的 x 变量(例如):
f <- make_fitting_function(lm(mpg ~ wt + am + carb, data = mtcars))
f(wt = c(1, 2, 3, 4, 5), am = rep(1, 5), carb = seq(2, 10, by = 2))
理想情况下,这个函数在单变量的情况下应该可以被integrate使用。
其实你不需要给参数命名;而只是让数据框传入以使用所有这些进行预测。
make_fitting_function <- function(model) {
function(...) {
predict(model, newdata=data.frame(...))
}
}
f <- make_fitting_function(lm(mpg ~ wt + am + carb, data = mtcars))
f(wt = c(1, 2, 3, 4, 5), am = rep(1, 5), carb = seq(2, 10, by = 2))
## 1 2 3 4 5
## 30.589985 24.637415 18.684846 12.732277 6.779708
我如何编写一个接受字符串向量的函数和 returns 一个带有字符串向量名称参数的函数?此外,我想使用我的参数字符串来创建一个 list
或 data.frame
,该函数以该函数内的输入列命名。我想要的应用程序是能够将其传递给 predict
方法来估计一些点。如果这个功能已经存在,请告诉我。否则,我很好奇我怎么写。下面我包含了 R 伪代码,说明了我正在尝试做的事情,并希望展示我在概念上遇到的困难。
make_fitting_function <- function(mod) {
x <- xterms(mod)
function(!! x) {
predict(mod, newdata = list(!! x))
}
}
调用此函数returns 一个可以在单独的向量参数上调用的函数。例如:
f <- make_fitting_function(lm(mpg ~ wt, data = mtcars))
f(wt = c(1, 2, 3, 4, 5))
结果将是:
1 2 3 4 5
31.94 26.60 21.25 15.91 10.56
然而,这也适用于更多的 x 变量(例如):
f <- make_fitting_function(lm(mpg ~ wt + am + carb, data = mtcars))
f(wt = c(1, 2, 3, 4, 5), am = rep(1, 5), carb = seq(2, 10, by = 2))
理想情况下,这个函数在单变量的情况下应该可以被integrate使用。
其实你不需要给参数命名;而只是让数据框传入以使用所有这些进行预测。
make_fitting_function <- function(model) {
function(...) {
predict(model, newdata=data.frame(...))
}
}
f <- make_fitting_function(lm(mpg ~ wt + am + carb, data = mtcars))
f(wt = c(1, 2, 3, 4, 5), am = rep(1, 5), carb = seq(2, 10, by = 2))
## 1 2 3 4 5
## 30.589985 24.637415 18.684846 12.732277 6.779708