cbind(1:2, 1:10)
[,1] [,2]
[1,] 1 1
[2,] 2 2
[3,] 1 3
[4,] 2 4
[5,] 1 5
[6,] 2 6
[7,] 1 7
[8,] 2 8
[9,] 1 9
[10,] 2 10
Run Code Online (Sandbox Code Playgroud)
我想要一个像下面这样的输出
[,1] [,2]
[1,] 1 1
[2,] 2 2
[3,] 3
[4,] 4
[5,] 5
[6,] 6
[7,] 7
[8,] 8
[9,] 9
[10,] 10
Run Code Online (Sandbox Code Playgroud)
Ric*_*ton 63
诀窍是使所有输入的长度相同.
x <- 1:2
y <- 1:10
n <- max(length(x), length(y))
length(x) <- n
length(y) <- n
Run Code Online (Sandbox Code Playgroud)
如果您希望输出为数组,则cbind可以正常工作,但是您可以获得其他NA值来填充矩形.
cbind(x, y)
x y
[1,] 1 1
[2,] 2 2
[3,] NA 3
[4,] NA 4
[5,] NA 5
[6,] NA 6
[7,] NA 7
[8,] NA 8
[9,] NA 9
[10,] NA 10
Run Code Online (Sandbox Code Playgroud)
要摆脱NAs,输出必须是一个列表.
Map(function(...)
{
ans <- c(...)
ans[!is.na(ans)]
}, as.list(x), as.list(y)
)
[[1]]
[1] 1 1
[[2]]
[1] 2 2
[[3]]
[1] 3
[[4]]
[1] 4
[[5]]
[1] 5
[[6]]
[1] 6
[[7]]
[1] 7
[[8]]
[1] 8
[[9]]
[1] 9
[[10]]
[1] 10
Run Code Online (Sandbox Code Playgroud)
编辑:我交换mapply(..., SIMPLIFY = FALSE)了Map.
Kon*_*rad 14
我遇到了类似的问题,我想建议一些额外的解决方案,我希望,有些可能会有用.解决方案相当简单,并使用qpcR包和提供的cbind.na功能.
x <- 1:2
y <- 1:10
dta <- qpcR:::cbind.na(x, y)
Run Code Online (Sandbox Code Playgroud)
> head(dta)
x y
[1,] 1 1
[2,] 2 2
[3,] NA 3
[4,] NA 4
[5,] NA 5
[6,] NA 6
Run Code Online (Sandbox Code Playgroud)
按照OP的原始示例,可以轻松删除列名称:
colnames(dta) <- NULL
Run Code Online (Sandbox Code Playgroud)
该操作将完整地产生所需的输出:
> head(dta)
[,1] [,2]
[1,] 1 1
[2,] 2 2
[3,] NA 3
[4,] NA 4
[5,] NA 5
[6,] NA 6
Run Code Online (Sandbox Code Playgroud)
小智 5
我想提出一个使用rowr包及其cbind.fill函数的替代解决方案。
> rowr::cbind.fill(1:2,1:10, fill = NA);
object object
1 1 1
2 2 2
3 NA 3
4 NA 4
5 NA 5
6 NA 6
7 NA 7
8 NA 8
9 NA 9
10 NA 10
Run Code Online (Sandbox Code Playgroud)
或者,要匹配 OP 所需的输出:
> rowr::cbind.fill(1:2,1:10, fill = '');
object object
1 1 1
2 2 2
3 3
4 4
5 5
6 6
7 7
8 8
9 9
10 10
Run Code Online (Sandbox Code Playgroud)