在R中拆分向量/数组



我想用R来执行类似于合并排序的操作。我想把我的向量/数组分成两部分。我的输入存在于一个名为inp的变量中。

> inp <- c(5,6,7,8,9,1,2,3,4)
> inplen <- length(inp)
> left <- inp[1:ceiling(inplen/2)]
> right <- inp[ceiling(inplen/2)+1:inplen]
> left
[1] 5 6 7 8 9
> right
[1]  1  2  3  4 NA NA NA NA NA
> length(left) 
[1] 5
> length(right)
[1] 9

这里你可以看到,虽然我把向量分成两半,但右半部分的大小比左半部分的大。另外,右半部分中有一些条目的值为NA。我不明白为什么创建的第二个向量(称为right)会有这些额外的条目。

您遇到了一个(众所周知的)问题,该问题是由":"的运算符优先级高于"+":的运算符优先级引起的

ceiling(inplen/2)+1:inplen
[1]  6  7  8  9 10 11 12 13 14

由于您的索引超过了向量的长度,因此将返回NA。

您缺少一个括号:

right = inp[(ceiling(inplen/2)+1):inplen]

为了扩展,假设我们有

1 + 1:3 

这是指CCD_ 1还是CCD_。R将其解释为1+(1:3),因此当您键入1+1:3时,会得到:

1 + c(1,2,3)

成为

c(2,3,4)

另一个常见的问题是:

R> x = 1:5
R> x[2:length(x)-1]
[1] 1 2 3 4

我们没有选择元素2到4,而是错误地选择了元素1到4。

您可以使用splitcut来创建断点:

split(inp,cut(seq(inplen),breaks=c(0,ceiling(inplen/2),inplen),labels=c("left","right")))
$left
[1] 5 6 7 8 9
$right
[1] 1 2 3 4

最新更新