eval 将字符解析为函数调用 r
eval parse character into function call r
我有一个带有 class 个字符的外部指定对象:
X = "c(Arg1 = 'First', Arg2 = 'Second', Arg3 = 'Third')"
我想直接插入到 R 中的一个函数中,就像 foo(X)
以下是我想要完成的示例:
Inputs <- eval(parse(text = X))
Msg_Foo <- function(Arg1, Arg2, Arg3) {
message(paste(Arg1, Arg2, Arg3, sep = "\n"))
}
Msg_Foo(
Arg1 = Inputs["Arg1"],
Arg2 = Inputs["Arg2"],
Arg3 = Inputs["Arg3"]
)
但理想情况下,我想要一个只需要一个解决方案:
Msg_Foo(Inputs)
这很重要,因为我想在函数中指定一个椭圆 (...),这样来自 X 的参数就可以直接传递给函数,而无需像上面的示例那样进行显式指定。
在 R 中使用 eval/parse 个字符串通常不是一个好主意,除非您 100% 确定它们是安全的。
但是您可以使用 do.call()
将参数动态传递给函数。例如
# X = "c(Arg1 = 'First', Arg2 = 'Second', Arg3 = 'Third')"
# Inputs <- eval(parse(text = X))
Msg_Foo <- function(x) {
message(do.call("paste", c(as.list(x), sep="\n")))
}
Msg_Foo(Inputs)
您的输入是一个命名的字符向量。我们需要将其转换为命名列表以与 do.call
一起使用,然后将其传递给粘贴函数。然后我们只是将结果传递给 message()
函数正常
我有一个带有 class 个字符的外部指定对象:
X = "c(Arg1 = 'First', Arg2 = 'Second', Arg3 = 'Third')"
我想直接插入到 R 中的一个函数中,就像 foo(X)
以下是我想要完成的示例:
Inputs <- eval(parse(text = X))
Msg_Foo <- function(Arg1, Arg2, Arg3) {
message(paste(Arg1, Arg2, Arg3, sep = "\n"))
}
Msg_Foo(
Arg1 = Inputs["Arg1"],
Arg2 = Inputs["Arg2"],
Arg3 = Inputs["Arg3"]
)
但理想情况下,我想要一个只需要一个解决方案:
Msg_Foo(Inputs)
这很重要,因为我想在函数中指定一个椭圆 (...),这样来自 X 的参数就可以直接传递给函数,而无需像上面的示例那样进行显式指定。
在 R 中使用 eval/parse 个字符串通常不是一个好主意,除非您 100% 确定它们是安全的。
但是您可以使用 do.call()
将参数动态传递给函数。例如
# X = "c(Arg1 = 'First', Arg2 = 'Second', Arg3 = 'Third')"
# Inputs <- eval(parse(text = X))
Msg_Foo <- function(x) {
message(do.call("paste", c(as.list(x), sep="\n")))
}
Msg_Foo(Inputs)
您的输入是一个命名的字符向量。我们需要将其转换为命名列表以与 do.call
一起使用,然后将其传递给粘贴函数。然后我们只是将结果传递给 message()
函数正常