2015-06-21 67 views
0

我在「正常」 R工作這行代碼:ifelse在R中與變異一起工作,爲什麼不在knitr中?

damage <- damage %>% mutate(EVTYPE = ifelse(grepl("winter", EVTYPE, 
    ignore.case=T), "Winter Weather", EVTYPE)) 

然而,在奇怪的行爲knitr結果完全相同的一行代碼。如果grep失敗,而不是將EVTYPE的值保留在一個單獨的值中,它將改爲一個數字。也許是一個索引。

在頭部的R(唯一的(損壞$ EVTYPE))輸出:

[1] 「龍捲風」 「TSTM風」 「冰雹」 「ICE STORM/FLASH FLOOD」
[5 ] 「冬天氣」 「颶風OPAL /大風」

而在knitr它是:

[1] 「407」 「423」 「134」 「239」
[5]「冬季天氣」「223」

這是一個錯誤?有沒有理由不期望在knitr中工作?

+2

它看起來像你的R環境中它是一個字符矢量,而在你的knitr環境中它是一個因素。你忘記在read.table或'data.frame'上使用'stringsAsFactors = FALSE'嗎? –

+0

就是這樣!非常感謝你。把它作爲答案,我會選擇它。 –

+1

如果這是原始上下文中的整行代碼(我理解它可能會從其原始上下文中修改),爲什麼還要使用'%>%'? '損傷< - 變異(傷害,...)'和'傷害<- damage %>%mutate(...)'相同並且更短... –

回答

4

它看起來像在你的R環境中它是一個字符矢量,而在你的knitr環境中它是一個因素。你忘記在read.table或data.frame上使用stringsAsFactors = FALSE嗎?

相關問題