【发布时间】:2020-06-10 06:09:50
【问题描述】:
我认为我的问题可以变得非常笼统和简单,因此我不会给出我正在尝试制作的具体功能。
我有一个函数可以根据它的第一个参数改变它的行为:
example <- function(arg1 = T,
arg2 = NULL,
arg3,
...) {
if (arg1 != T) {
final <- bind_rows(arg2)
} else{
list1 <- list(...)
final <- bind_rows(list1, arg3)
}
return(final)
}
我的问题是,如果我运行 example(arg1 = T, arg3 = x, c(A,B), c(C,D)),考虑到我的函数的用户可能不会为 arg2 写出任何内容,我就有问题了。 c(A,B) 最终不被视为list1 的第一个元素(我猜它被分配给arg2 然后在函数中未使用)并且我有bind_rows(c(C,D), x) 作为输出,而不是bind_rows(c(A,B), c(C,D), x)。
考虑到该功能不是供个人使用,而是用于更大的包装,如何解决此问题?
【问题讨论】:
-
不幸的是,我认为
arg2的编写方式不能跳过。不过,我认为example(arg1 = T, arg3 = x, ,c(A,B), c(C,D))可能会起作用。 -
请考虑省略号不需要是函数的最后一个参数。如果用户需要使用
arg2,则可以命名。 -
顺便说一句:最好写
TRUE而不是T,然后写if(!arg1) ...