首页 > 解决方案 > 将不同函数的参数传递给 R 函数

问题描述

我有一个“主”函数foo,我需要从中调用另外两个函数fun1fun2. 这些中的每一个都有我想从外部设置的单独的参数集。

library(tidyverse)
#> Registered S3 methods overwritten by 'ggplot2':
#>   method         from 
#>   [.quosures     rlang
#>   c.quosures     rlang
#>   print.quosures rlang

fun1 <- function(a, c) {
  print(glue::glue("a is {a}"))
  print(glue::glue("c is {c}"))
}

fun2 <- function(e, g) {
  print(glue::glue("e is {e}"))
  print(glue::glue("g is {g}"))
}

foo <- function(something, additional_args) {
  print(glue::glue("Called with {something}"))
  # I know I can do this, but I don't want to explicitly specify a, c, e and g here!)
  fun1(additional_args$fun1_args$a, additional_args$fun1_args$c)
  fun2(additional_args$fun2_args$e, additional_args$fun2_args$g)
}

foo("something", additional_args = list(
  fun1_args = list(a = "b", c = "d"),
  fun2_args = list(e = "f", g = "h")
))
#> Called with something
#> a is b
#> b is d
#> c is f
#> d is h

reprex 包(v0.3.0)于 2019 年 7 月 17 日创建

显然,我不得不重复里面的参数名称并不是很好foo。并且函数fun1fun2可能需要更多参数,或者不是全部,或者有一些默认值。

我认为我没有完全掌握准报价。我通读了文档,但没有任何内容适用。我没有...在任何地方使用,因为我不想混淆 functionfun1fun2.

如何替换这些奇怪的调用,在这些调用中我明确指定了参数,以便它们只转发参数?

  fun1(additional_args$fun1_args$a, additional_args$fun1_args$c)
  fun2(additional_args$fun2_args$e, additional_args$fun2_args$g)

我努力了

  fun1_args = enquos(additional_args$fun1_args)
  fun1(!!! fun1_args)

但它说:

错误:要捕获的输入必须是参数名称

我也试过fun1(!!!additional_args$fun1_args),但它说:

!additional_args$fun1_args 中的错误:参数类型无效

标签: rrlang

解决方案


推荐阅读