使用dplyr的mutate_at时如何向函数传参设置scale=FALSE
解决方案
你只需要在调用scale()时显式指定scale = FALSE参数即可,修改后的代码如下:
centdata <- mydat %>% mutate_at(.vars = c(1, 2, 3, 4, 5, 6, 7, 8, 14), .funs = list("scaled" = ~scale(., scale = FALSE)))
参数说明
scale()默认同时开启两个处理逻辑:center = TRUE(执行中心化,减去变量均值)、scale = TRUE(执行标准化,除以变量标准差),仅保留中心化关闭标准化的需求下,显式传入scale = FALSE即可。
补充优化建议
如果你的dplyr版本为1.0.0及以上,更推荐使用官方现在主推的across()语法替代已被软弃用的mutate_at,写法更简洁灵活:
centdata <- mydat %>% mutate(across(c(1:8, 14), ~scale(., scale = FALSE), .names = "{.col}_scaled"))
如果后续处理需要纯数值向量而非带属性的矩阵,可以调整函数写法避免类型报错:
~as.numeric(scale(., scale = FALSE))
内容的提问来源于stack exchange,提问作者Michael Weaver
相关产品推荐
相关产品推荐

