通过 %>% 将因子转换为数字:意外结果

Factor to numeric conversion via %>%: unexpected results

当通过管道 %>% 运算符将因子转换为数值向量时,我错误地认为

myfactor %>% as.character %>% as.numeric

会给出与

相同的结果

我的因素 %>% as.numeric(as.character(.))

c(0,1,2) %>% as.factor  %>% as.character %>% as.numeric ## returns 0,1,2
c(0,1,2) %>% as.numeric(as.character(as.factor(.)))     ## returns 0,1,2
c(0,1,2) %>% as.factor  %>% as.numeric(as.character(.)) ## returns 1,2,3 (unexpected)
myfun <- function(x) as.numeric(as.character(x))
c(0,1,2) %>% as.factor  %>% myfun                       ## returns 0,1,2

有人可以解释一下不一致的结果吗?谢谢!

管道运算符将管道对象作为以下函数的第一个参数传递。点仅在同一个函数调用中更改此行为,这在详细信息部分的 documentation 中进行了解释。

所以你的第三行相当于

as.numeric(as.factor(c(0,1,2)), as.character(as.factor(c(0,1,2))))

同时获得您需要的预期结果

c(0,1,2) %>% as.factor %>% { as.numeric(as.character(.)) }