【发布时间】:2015-06-21 09:15:56
【问题描述】:
我有这行代码在“正常”R 中工作:
damage <- damage %>% mutate( EVTYPE = ifelse(grepl("winter", EVTYPE,
ignore.case=T), "Winter Weather", EVTYPE))
但是,knitr 中完全相同的代码行会导致奇怪的行为。如果 grep 失败,EVTYPE 的值不会被单独保留,而是改为一个数字。也许是一个索引。
head(unique(damage$EVTYPE)) 在 R 中的输出是:
[1]“龙卷风”“TSTM 风”“冰雹”“冰风暴/山洪”
[5]“冬季天气”“飓风蛋白石/强风”
而在 knitr 中是:
[1]“407”“423”“134”“239”
[5] 《冬季天气》《223》
这是一个错误吗?是否有某些原因预计这不会在 knitr 中工作?
【问题讨论】:
-
看起来在你的 R 环境中它是一个字符向量,而在你的 knitr 环境中它是一个因素。您是否忘记在 read.table 上使用
stringsAsFactors = FALSE或data.frame? -
就是这样!非常感谢你。把它记下来作为答案,我会选择它。
-
如果这是原始上下文中的整行代码(我很欣赏它可能会从原始上下文中修改),为什么还要使用
%>%?damage <- mutate(damage, ...)与damage <- damage %>% mutate(...)工作方式相同,并且更短... -
@BenBolker 甚至更短(如果使用 magrittr)
damage %<>% mutate(EVTYPE = ...)