2013-10-18 66 views
1

這似乎是一個非常簡單的問題,但我無法弄清楚。在R中選擇至多n個元素

如何從R列表中選擇至多n個元素?

> x = 1:3 
> x[1:5] 
[1] 1 2 3 NA NA 

我想那是什麼x[1:5]回報[1] 1 2 3

我嘗試的解決方案是

x[!is.na(x[1:3])] 

仍然不起作用,因爲

> x[!is.na(x[1:5])] 
[1] 1 2 3   # correct 
> x[!is.na(x[1:2])] 
[1] 1 2 3   # where's that coming from? 
+0

正在回收邏輯向量以匹配'x'的長度。試試'x [which(!is.na(x [1:2]))]' – Arun

+3

不會'head'工作嗎?例如'head(x,5)'? – A5C1D2H2I1M1N2O1R2T1

+0

哦,我沒有想到'頭'。在所有建議的方法中,這是最好的。雖然它只能用於1:5,不能用於2:6。 – gozzilli

回答

1

要確保你不索引過去的向量的末尾,你可以這樣做:

x[1:(min(5, length(x)))] 
1

x[!is.na(x[1:2])]
[1] 1 2 3 # where's that coming from?

這是從來回收
is.na(X)返回長度等於其參數X的邏輯向量。由於沒有NA s這個向量都是TRUE s。這些值(再次,所有TRUE)被再循環到的x長度(x在托架的外側,x[ . ]

作爲從X採取的選擇,不超過x的長度,使用head和作爲@Ananda在評論中提到的tail

x <- 1:6 
head(x, 4) 
# [1] 1 2 3 4 
head(x, 20) 
# [1] 1 2 3 4 5 6 

tail(x, 4) 
# [1] 3 4 5 6 
tail(x, 20) 
# [1] 1 2 3 4 5 6