2013-09-05 77 views
1

我有下列R-腳本:變化真假Yes和No

x <- c('PE', 'MG', 'SP', 'GO', 'ES', 'PB', 'DF') 
y <- c('PB', 'MG', 'SP', 'GO', 'ES', 'SE', 'DF') 
z <- x == y 

這樣

> z 
[1] FALSE TRUE TRUE TRUE TRUE FALSE TRUE 

不過,我想z(和其它邏輯變量進一步下跌的腳本)來顯示「是」和「否」,而不是,所以我做這個重新編碼:

z <- ifelse(z == TRUE, "Yes", "No") 

有什麼辦法可以跳過這個分機ra步驟,即定義z顯示「是」而不是「真」和「否」而不是「假」。

當然,我也可以做z <- ifelse(x == y, "Yes", "No"),但我仍然在尋找類似的options()函數中的參數我只定義一次,有它,直到腳本結束工作(或直到我重新定義參數)。在?options上找不到像這樣的東西。

+1

這並沒有解決你的問題,但你並不需要的'==',因爲變量已經是邏輯類型了。你可以簡單地做'z = ifelse(z,'是','否') –

+0

我會繼續說你的問題的答案是'ifelse(FALSE,'是','否')' – Dason

+0

@SeñorO,感謝您的投入,我忘記了這個訣竅。備用一些代碼字節總是很好的。 –

回答

9

據我所知是沒有辦法覆蓋的事實,R打印TRUEFALSE的邏輯對象(我個人認爲這是很好的)。

最接近的解決方案,你要尋找的可能是因素轉換:

z <- factor(x==y, labels=c("No", "Yes")) 

> z 
[1] No Yes Yes Yes Yes No Yes 
Levels: No Yes 
+0

我想默認的TRUE/FALSE對於快速理解每個對象所屬的類很方便,但是當我需要以表格的形式呈現數據時,看起來很奇怪,特別是因爲我的報告不是用英文寫的。 –

+1

然後像你所做的那樣在本地進行這種改變,似乎比試圖在全球範圍內改變輸出更好。 – Dason

+0

我認爲背後的一個主要原因是邏輯類型用於子集化等:'x [z]'適用於「邏輯」類型而不是「因子」類型。 –

7

另一種方法:

c('No', 'Yes')[z + 1] 
+1

或'z < - c('否','是')[1 + c(x == y)]'蝙蝠右邊。 –