【问题标题】:Creating a function based on varying argument names in R基于 R 中不同的参数名称创建函数
【发布时间】:2021-09-21 17:37:42
【问题描述】:

我想创建一个基于不同参数和主体生成函数的函数。

例如,取n=2a=paste0("a",1:2n),即a=c("a1","a2","a3","a4")

那我想创建一个函数如下-

fa = function(a1,a2,a3,a4) { 
args_fa = unlist(as.list(environment())) # catch all the arguments as a list
v1 = args_fa[1:n] # assign values to baseline function arguments
v2 = args_fa[(n+1):2*n]
f(v1,v2)
} 

n=3 也一样,我希望函数看起来像这样 -

fa = function(a1,a2,a3,a4,a5,a6) { 
args_fa = unlist(as.list(environment())) # catch all the arguments as a list
v1 = args_fa[1:n] # assign values to baseline function arguments
v2 = args_fa[(n+1):2*n]
f(v1,v2)
} 

函数内部的f 是一个基线函数(固定),不会发生变化。我的问题是如何根据更改n 创建fa

【问题讨论】:

  • 如果你传递不同的参数,使用...而不是函数重载
  • 你在哪里定义n? (不要说“在全局或调用者的环境中”:-)

标签: r function


【解决方案1】:

使用省略号...,并在参数列表中包含n

fa <- function(n, ...) {
  stopifnot(length(n) == 1L, n > 0)
  args_fa <- unlist(list(...))
  v1 <- args_fa[1:n]
  v2 <- args_fa[(n+1):(2*n)]
  f(v1, v2)
}

或者,将n 放在最后。这要求 n 是一个命名参数,它不能作为位置参数传递。

fa <- function(..., n) {
  stopifnot(length(n) == 1L, n > 0)
  args_fa <- unlist(list(...))
  v1 <- args_fa[1:n]
  v2 <- args_fa[(n+1):(2*n)]
  f(v1, v2)
}

或者如果你总是有一个向量或参数列表,那么也许

fa <- function(args_fa, n) {
  stopifnot(length(n) == 1L, n > 0)
  v1 <- args_fa[1:n]
  v2 <- args_fa[(n+1):(2*n)]
  f(v1, v2)
}

【讨论】:

  • Debangan Dey,这能解决您的问题吗?如果是这样,请accept it。谢谢!
猜你喜欢
  • 1970-01-01
  • 2020-10-01
  • 2018-10-17
  • 1970-01-01
  • 1970-01-01
  • 2019-08-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多