在不更改函数调用的情况下从单个对象提供多个参数的参数?

时间:2019-09-08 11:15:49

标签: r

有什么方法可以将一个函数的多个输入作为单个对象提供?

示例

假设一个函数需要2个输入

funct <- function(x, y) {
  x * y
}

funct(2, 7)
# [1] 14

我们可以以某种方式将两个输入作为一个对象提供吗?

inputs <- c(2, 7)
funct(inputs)
Error in funct(inputs) : argument "y" is missing, with no default

inputs <- list(2, 7)
funct(inputs)
Error in funct(inputs) : argument "y" is missing, with no default

我想仅通过更改输入而不是通过编辑函数或函数调用(即,不使用do.call())来实现此目的。有办法吗?

也就是说,该函数不得更改,其调用方式也不得更改(即,不得使用do.call()或以其他方式更改该函数)

所需结果

我需要将inputs更改为任何内容,

funct(inputs)
# [1] 14

1 个答案:

答案 0 :(得分:1)

因此,根据您的问题,我了解到您需要使用单个参数将x,y的值都传递给函数。

通过传递列表或字典并在函数内部使用相同的方法来完成此操作的最佳方法:

如果将其作为列表或数组传递,则执行此操作

`funct <- function(x) {
  x[[1]] * x[[2]]
}`

`inputs <- list(2, 7)
 funct(inputs)`

如果将其作为字典传递,则将具有命名值的优点:

`funct <- function(input) {
  library(hash)
  input[["x"]] * input[["y"]]
}`

`library(hash)
 inputs <- hash() 
 inputs[["x"]] <- 2
 inputs[["y"]] <- 7
 funct(inputs)`

或者您可以对现有功能执行以下操作:      do.call(funct,list(2,7))