2012-07-30 43 views
0

我在R工作,發現了一個奇怪的行爲。我可以解決它,但它只是似乎很奇怪,所以我想知道,如果有人可以解釋爲什麼我得到以下輸出:R向量子集的語法?

> xlabs <- 1:367 
> i <- c(2:5) 
> Date[xlabs == i] 
character(0) 
Warning message: 
In xlabs == i : 
    longer object length is not a multiple of shorter object length 
> Date[xlabs = i] 
[1] "2011-07-19" "2011-07-20" "2011-07-21" "2011-07-22" 

我不明白爲什麼邏輯等號不會在這種情況下適用,但簡單的等於是。我正在編寫一個關於如何在R中進行特定分析過程的快速手冊,我不想爲讀者的緣故使用「正因爲」的解釋。

+1

爲什麼不只是'Date [i]'? – 2012-07-30 20:14:29

+1

邏輯等於將向量應用於單個值,而不是向量應用於向量。你正在尋找'%in%'。 'Date [xlabs%in%i]' – Justin 2012-07-30 20:14:30

+0

@Justin:邏輯等於可以將一個向量應用於一個向量,它只是將它們作爲元素 – 2012-07-30 20:15:13

回答

4

你想要的操作是%in%

Date[xlabs %in% i] 

=不是做你認爲它是。看看xlabs你示例的最後一行;您正在將xlabs設置爲i,就如同您的操作xlabs <- i一樣,因爲=幾乎代替了<-

==因爲比較的方式不起作用。考慮:

> 1:10 == 5:7 
[1] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE 
Warning message: 
In 1:10 == 5:7 : 
    longer object length is not a multiple of shorter object length 

即做:

> 1 == 5 
[1] FALSE 
> 2 == 6 
[1] FALSE 
> 3 == 7 
[1] FALSE 
> 4 == 5 
[1] FALSE 
> 5 == 6 
[1] FALSE 
> 6 == 7 
[1] FALSE 
> 7 == 5 
[1] FALSE 
> 8 == 6 
[1] FALSE 
> 9 == 7 
[1] FALSE 
> 10 == 5 
[1] FALSE 

ř通過重複以匹配的長度越長回收短矢量。由於length(xlabs)不是的整數倍length(i)你得到警告,但它是沒有任何選擇

> 1[FALSE] 
numeric(0) 

因此空載體(在你的情況下,空字符向量)的比較本身。

+1

+1或者,在這種情況下,只是'Date [i]'。 '%in%'很好,如果'xlabs'可能不是連續的整數從1開始。 – 2012-07-30 20:17:23

+0

非常好的答案,我明白你的意思與比較。這就是爲什麼'=='在我開始以1開始的範圍內工作的原因。我查看了我的xlabs,它和啓動時一樣。這裏是我的代碼'> i = 1:8 > xlabs [1] 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 ... > Date [xlabs = i] [1]「2011-07-18」「2011-07-19」「2011-07-20」「2011-07-21」「2011-07-22」「2011-07-23」 [7]「 2011-07-24「」2011-07-25「 > xlabs [1] 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 ' – 2012-07-30 20:29:37

+0

PS抱歉可怕的格式 – 2012-07-30 20:30:03