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

问题描述

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

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

将给出与

相同的结果

myfactor%>%as.numeric(as.character(。))

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

有人可以解释一下差异结果吗?谢谢!

解决方法

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

所以您的第三行相当于

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

在获得所需结果的同时

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