有没有办法将带有参数的字符串解析为语言对象列表?例如:
> query <- "mpg, cyl, hp:vs"
> eval(parse(text=paste0("dplyr:::dots(", query, ")")))
[[1]]
mpg
[[2]]
cyl
[[3]]
hp:vs
但这很难看,会导致代码注入等。有没有办法分别解析query
部分而不将其注入R代码?我真的想使用本机解析器并避免使用字符串操作手动修改代码,因为参数本身可以包含代码或逗号。例如:
query2 <- "foo, 'flip,flop', function(x){print('foo', x)}"
eval(parse(text=paste0("dplyr:::dots(", query2, ")")))
应该产生:
[[1]]
foo
[[2]]
[1] "flip,flop"
[[3]]
function(x) {
print("foo", x)
}
答案 0 :(得分:3)
# First, create a string that represents a function call
string <- paste0("c(", query, ")")
# Next, parse it, and extract the function call
call <- parse(text = string)[[1]]
# Finally, remove the first element (`c`) and
# convert to a list
as.list(call[-1])
没有评估代码,因此您应该安全地避免代码注入。 (当然,parse
)