此问题与上一个问题有关:Running a function with multiple arguments when an argument is not used
我有两个功能,original
和example
将在以后的包装中。 example
将遵循if/else
结构,并在其中一个分支(如果为arg1 = T
)上运行original
。内容如下:
编辑:给出比以前更现实的示例
original <- function(start, ...) {
list1 = list(...)
if (any(map(list1, length) != 2)) {stop('ERROR! Each vector must have length 2')}
df = read.csv(start)
final <- bind_rows(list1, df)
return(final)
}
example <- function(arg1 = TRUE, ...) {
args<- list(...)
if (!(arg1) & is.null(args$arg2)) {stop("If arg1 == F, arg2 is needed.")}
if(arg1 == TRUE & is.null(argumentos$arg3)){stop("If arg1 == T, arg3 is needed.")}
if (arg1 != TRUE) {
final <- bind_rows(arg2)
} else{
arg3 <- args$arg3
args$arg3 <- NULL
final <- original(start = arg3, args)
}
return(final)
}
原始问题:可以嵌套这样的函数吗?
我的主要问题是,如何确保list1
中形成original
的元素现在由...
的省略号example
中的条目构成?我不能简单地将后者包含在列表中,因为original
本身已经可以做到这一点。
编辑,我的主要问题是original
中的典型呼叫的格式为original(start, c(1, 2000), c(2, 2001), c(3,2001))
。
在计算机上运行时,出现问题是因为当我在example
上运行example(arg1 = TRUE, arg3 = './Desktop', c(1, 2000), c(2, 2001), c(3,2001))
时,我希望R
通过example()
,original(start = './Desktop', c(2, 2001), c(3,2001))
计算。
但是R崩溃了,这给了我第一个功能的原始停止消息:
ERROR! Each vector must have length 2
仅当arg3
之后有多个矢量时才会发生这种情况。
也许我的函数正在运行original(start = './Desktop', '.Desktop', c(2, 2001, 3 ,2001))
,
有人可以帮我解决这个问题吗?