0

在我的应用程序中,用户可以提供“子集”表达式(由 mix: 变量、存储在变量中的名称 - videargs_inputsubset_args_input变量组成)作为subset/[函数的参数:

df_data <- data.frame("a" = c(1,1,2),
                      "b" = c(3,4,4),
                      "c" = c(5,6,7))

global_data <- list("column_to_extract" = c("b"))

args_input <- "list(df_data, df_data$a %in% c(1), global_data[['column_to_extract']])"

我的期望是得到与执行相同的结果:

do.call("[", list(df_data, df_data$a %in% c(1), global_data[['column_to_extract']]))

通过执行这个:

do.call("[", eval(parse(text=args_input)))

另外,我尝试过类似的东西subset

subset_args_input <- "list(quote(df_data), quote(a %in% c(1)), quote(global_data[['column_to_extract']]))"

do.call("subset", eval(parse(text=subset_args_input)))
  1. 这两种方法都有效,但需要eval+ parse,如果允许用户传递任何字符串,这是不安全的。eval问题 - 如果没有+parse组合,是否可以达到相同的结果?
  2. 您(R 用户:)能否请看一下上面的片段 - 是否有任何不必要的东西/违反 R 哲学的东西?
4

0 回答 0