rlang: создание пустых списков из ввода переменных символов - PullRequest
0 голосов
/ 22 сентября 2018

Чтобы указать аргументы в функции, созданной в args -аргументе rlang::new_function, я ищу способ создания пустых списков.Затем они могут быть переданы в new_function и возвращать функции с предопределенными аргументами.

library(rlang)
create_empty_list <- function(arg_names_chr) {
  # input lenght should be variable, so probably !!! should be used
}

create_empty_list(arg_names_chr = c("arg1", "arg2"))
#> NULL

# desired output
args_specified <- exprs(arg1=, arg2=)
args_specified
#> $arg1
#> 
#> 
#> $arg2

# use with new_function()
new_function(
  args_specified,
  expr(print("hello world")),
  caller_env()
)
#> function (arg1, arg2) 
#> print("hello world")

Что я пробовал до сих пор:

c("arg1", "arg2") %>% 
  map(parse_expr) %>% 
  exprs(!!!arg_names_chr, .named = TRUE)
#> $arg1
#> arg1
#> 
#> $arg2
#> arg2
#> 
#> # the contents of the list should be empty though... 

Я полагаю, используя unquote-splice (!!!) крайне важно сохранить гибкость входной длины, но я не мог собрать ее вместе с пустыми списками, необходимыми для args -части new_function пока ...

1 Ответ

0 голосов
/ 22 сентября 2018

Вы можете создать список обычным способом с missing_arg() в нем:

arg_names <- c("arg1", "arg2")

args <- rep(list(missing_arg()), length(arg_names))
names(args) <- arg_names

new_function(args, NULL)
#> function (arg1, arg2)
#> NULL
...