以下函数创建一个data.frame,其中n列为参数个数
elixir(function(mix) {
mix
.sass('app.scss', './public/css/app.css')
.sass('admin.scss', './public/css/admin.css');
});
运行时 functionWithDots(1,2) 预期结果是:
如果我通过替换"(1,2)"来做同样的事情。用" 1:2"如
functionWithDots <- function(...) {
f1 <- function(x) c(x,x+4)
list <- list(...)
list <- lapply(list, f1)
expand.grid(list)
}
结果是
如何将正确的非关联参数传递给该函数,因为它在传递时似乎返回不同的结果,让我们说,&#34; 1,2,3&#34;而不是&#34; c(1,2,3)&#34;?
答案 0 :(得分:2)
假设我正确理解了问题,即。 OP希望通过在1,2
中传递1:2
和functionWithDots
来获得相同的结果,这是修复它的一种方法。对于这两种情况,我们将...
中的元素转换为list
,并且应该为这两种情况提供相同的结果。
functionWithDots <- function(...) {
f1 <- function(x) c(x,x+4)
dots <- c(...)
list <- as.list(dots)
list <- lapply(list, f1)
expand.grid(list)
}
functionWithDots(1,2)
# Var1 Var2
#1 1 2
#2 5 2
#3 1 6
#4 5 6
functionWithDots(1:2)
# Var1 Var2
#1 1 2
#2 5 2
#3 1 6
#4 5 6
使用1:3
与1,2,3
functionWithDots(1,2,3)
# Var1 Var2 Var3
#1 1 2 3
#2 5 2 3
#3 1 6 3
#4 5 6 3
#5 1 2 7
#6 5 2 7
#7 1 6 7
#8 5 6 7
functionWithDots(1:3)
# Var1 Var2 Var3
#1 1 2 3
#2 5 2 3
#3 1 6 3
#4 5 6 3
#5 1 2 7
#6 5 2 7
#7 1 6 7
#8 5 6 7
现在,让我们看看OP功能中的问题(删除了lapply
和expand.grid
)
functionWithDots <- function(...) {
f1 <- function(x) c(x,x+4)
list <- list(...)
print(list)
}
在第一种情况1:2
中,该函数返回list
length
1
functionWithDots(1:2)
#[[1]]
#[1] 1 2
而在第二个中,它返回list
,其长度等于输入中元素的数量
functionWithDots(1,2)
#[[1]]
#[1] 1
#[[2]]
#[1] 2
在修改后的函数中,两者都返回list
,其长度等于输入参数中的元素数。
functionWithDots <- function(...) {
f1 <- function(x) c(x,x+4)
dots <- c(...)
list <- as.list(dots)
print(list)
}
functionWithDots(1:2)
#[[1]]
#[1] 1
#[[2]]
#[1] 2
functionWithDots(1,2)
#[[1]]
#[1] 1
#[[2]]
#[1] 2