使用变量对向量进行子集会更改结果向量的长度

时间:2014-05-26 13:23:22

标签: r vector subset

我想使用切片点的变量对名为text的向量进行子集化。问题是得到的矢量与输入矢量具有相同的长度,最后10个元素是NA。这是什么原因?

> data_starts_at+1
[1] 11
> length(text)
[1] 12335
> x = text[11:12335]
> length(x)
[1] 12325
> x = text[data_starts_at+1:length(text)]
> length(x)
[1] 12335
> tail(x)
[1] NA NA NA NA NA NA

更新

看起来这个问题与运算符优先级有关:

> x = text[(data_starts_at+1):length(text)]
> length(x)
[1] 12325

但是使用x = text[data_starts_at+1:length(text)]正确地进行了子集化,只是在x末尾附加了10个元素。

2 个答案:

答案 0 :(得分:3)

这是括号的问题

x <- 1:10
data_starts_at <- 2
data_starts_at+1:10
[1]  3  4  5  6  7  8  9 10 11 12
# it means that you add data_starts_at at the vector 1:10
# then the final NA is because you ask for data that does not exist (11 & 12)
x[(data_starts_at+1):10]
[1]  3  4  5  6  7  8  9 10 #it's ok

HTH

答案 1 :(得分:1)

使用正确的括号:

x = text[(data_starts_at+1):length(text)]

您正在做的是获取索引1:length(text)并将data_starts_at添加到每个值中。