问题描述
通过管道%>%运算符将因子转换为数值向量时,我错误地认为
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(.)) }