通过 %>% 将因子转换为数字:意外结果
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(.)) }
当通过管道 %>% 运算符将因子转换为数值向量时,我错误地认为
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(.)) }