R:将列表元素从函数输入转换为表达式
R: convert elements of list into expression from function input
我正在编写一个函数,其中输入是另一个函数的参数和名称。我想将这些参数和函数名称转换为未计算的表达式或调用。例如,如果这是对函数的调用:
huh_fun(
data = mtcars
method = lm,
formula = hp ~ mpg,
method.args = list(weights = drat, subset = rep(TRUE, 32)) # list of additional arguments
)
我希望函数 return 以下 expression/call,未计算:
lm(hp ~ mpg, data = mtcars, weights = drat, subset = rep(TRUE, 32))
我已成功引用 data=
、method=
和 formula=
参数并将它们组合到一个调用中。但无法弄清楚如何引用 method.args=
参数,并将列表元素添加到函数参数中。任何和所有指针表示赞赏。谢谢~
您可以将 deparse(substitute(x))
和 paste
一起使用。使用 str2lang
.
生成调用
huh_fun <- function(data, method, formula, method.args) {
str2lang(paste0(deparse(substitute(method)), "(", deparse(substitute(formula)), ", ",
"data = ", deparse(substitute(data)), ", ",
gsub("list\((.*)\)$", "\1", deparse(substitute(method.args))),
")"))
}
结果
huh_fun(
data=mtcars,
method=lm,
formula=hp ~ mpg,
method.args=list(weights=drat, subset=rep(TRUE, 32)) # list of additional arguments
)
# lm(hp ~ mpg, data = mtcars, weights = drat, subset = rep(TRUE, 32))
在 "huh_fun" 中有固定的参数名称,我们可以使用 "language" 个对象构造一个未计算的调用:
huh_fun = function(data, method, formula, method.args)
{
ans = c(list(substitute(method),
substitute(formula),
data = substitute(data)),
as.list(substitute(method.args))[-1])
as.call(ans)
}
huh_fun(
data = mtcars,
method = lm,
formula = hp ~ mpg,
method.args = list(weights = drat, subset = rep(TRUE, 32)))
#lm(hp ~ mpg, data = mtcars, weights = drat, subset = rep(TRUE,
# 32))
我正在编写一个函数,其中输入是另一个函数的参数和名称。我想将这些参数和函数名称转换为未计算的表达式或调用。例如,如果这是对函数的调用:
huh_fun(
data = mtcars
method = lm,
formula = hp ~ mpg,
method.args = list(weights = drat, subset = rep(TRUE, 32)) # list of additional arguments
)
我希望函数 return 以下 expression/call,未计算:
lm(hp ~ mpg, data = mtcars, weights = drat, subset = rep(TRUE, 32))
我已成功引用 data=
、method=
和 formula=
参数并将它们组合到一个调用中。但无法弄清楚如何引用 method.args=
参数,并将列表元素添加到函数参数中。任何和所有指针表示赞赏。谢谢~
您可以将 deparse(substitute(x))
和 paste
一起使用。使用 str2lang
.
huh_fun <- function(data, method, formula, method.args) {
str2lang(paste0(deparse(substitute(method)), "(", deparse(substitute(formula)), ", ",
"data = ", deparse(substitute(data)), ", ",
gsub("list\((.*)\)$", "\1", deparse(substitute(method.args))),
")"))
}
结果
huh_fun(
data=mtcars,
method=lm,
formula=hp ~ mpg,
method.args=list(weights=drat, subset=rep(TRUE, 32)) # list of additional arguments
)
# lm(hp ~ mpg, data = mtcars, weights = drat, subset = rep(TRUE, 32))
在 "huh_fun" 中有固定的参数名称,我们可以使用 "language" 个对象构造一个未计算的调用:
huh_fun = function(data, method, formula, method.args)
{
ans = c(list(substitute(method),
substitute(formula),
data = substitute(data)),
as.list(substitute(method.args))[-1])
as.call(ans)
}
huh_fun(
data = mtcars,
method = lm,
formula = hp ~ mpg,
method.args = list(weights = drat, subset = rep(TRUE, 32)))
#lm(hp ~ mpg, data = mtcars, weights = drat, subset = rep(TRUE,
# 32))