这是一个选项,将关键概念包装到一个函数中,让事情正常工作。最简单的方法就是rep()
在每个元素上使用...
将每个输入向量重复...
到一个共同的长度(即最长输入向量的长度)。
这就是我在下面length.out
使用rep()
.
CBIND <- function(..., deparse.level = 1) {
dots <- list(...) ## grab the objects passed in via ... this is a list
len <- sapply(dots, length) ## find lengths of individual vectors
## this applies rep() over dots extending each component vector to length
## of longest vector in ...
dots <- lapply(seq_along(dots),
function(i, x, len) rep(x[[i]], length.out = len),
x = dots, len = max(len))
## need to put everything together so arrange for a call to cbind
## passing the extended list of vectors and passing along
## the deparse.level argument of cbind
do.call(cbind, c(dots, deparse.level = deparse.level))
}
这给出了:
R> CBIND(c(1,2,3),c(4,5))
[,1] [,2]
[1,] 1 4
[2,] 2 5
[3,] 3 4
R> CBIND(c(1,2,3),c(4,5), deparse.level = 2)
c(1, 2, 3) c(4, 5, 4)
[1,] 1 4
[2,] 2 5
[3,] 3 4
我肯定会赞成这个,而不是简单地suppressWarnings()
在电话周围发出警告。对于生产代码,您希望明确处理您希望允许的情况,并在用户做了您未考虑的事情的情况下传播警告。