假设函数foo
的参数是任意定义为...
。
如果参数的名称a = c("ESL", "prof")
,并且它们的值a1.vales = 1:8
和a2.vales = 0:7
:
我怎样才能使:foo(a[1] = a1.vales, a[2] = a2.vales)
工作就像:foo("ESL" = a1.vales, "prof" = a2.vales)
?
附言setNames
可以在这里帮忙吗?
foo <- function(n = 2:9, ...){
data.frame(n = n, ...)
}
## Function argument names and values:
a = c("ESL", "prof")
a1.vales = 1:8
a2.vales = 0:7
## Example of use:
foo(a[1] = a1.vales, a[2] = a2.vales) # Fails?
foo("ESL" = a1.vales, "prof" = a2.vales) # Works
要解决您当前的问题,有一个解决方法:
foo <- function(n = 2:9, ...){
args <- list(...)
setNames(data.frame(c(list(n), args[-1])), c("n", args[[1]]))
}
foo(n = 2:9, a, a1.vales, a2.vales)
n ESL prof
1 2 1 0
2 3 2 1
3 4 3 2
4 5 4 3
5 6 5 4
6 7 6 5
7 8 7 6
8 9 8 7