解决plyr包round_any处理data.frame报错并实现0.05倍数取整
解决
round_any()无法处理data.frame的问题 嘿,这个坑我之前也踩过!plyr包里的round_any()函数默认只能处理单个向量,直接扔给整个data.frame肯定会报错——它找不到对应data.frame类的处理方法嘛。下面给你几个简单好用的解决办法:
方法1:用plyr自带的colwise()包装函数
colwise()的作用就是把只支持向量的函数,转换成能遍历data.frame每一列的函数,完美适配你的需求:
library(plyr) # 把round_any包装成逐列处理的函数,再作用于你的data.frame rounded_table <- colwise(round_any)(Table, 0.05)
方法2:用base R的apply()函数
如果不想额外用plyr的其他工具,base R的apply()也能搞定,按列遍历处理每一列:
library(plyr) # 2代表按列处理,处理后转回data.frame rounded_table <- as.data.frame(apply(Table, 2, function(x) round_any(x, 0.05)))
方法3:用dplyr(更推荐的tidyverse方式)
如果你平时用tidyverse系列工具,用dplyr的across()语法会更直观,还能避免plyr和dplyrr的函数冲突(如果同时加载的话):
library(dplyr) # 用across选中所有列,调用plyr::round_any避免命名冲突 rounded_table <- Table %>% mutate(across(everything(), ~plyr::round_any(.x, 0.05)))
小提醒
如果同时加载了plyr和dplyr,记得用包名::函数名的方式指定函数,比如plyr::round_any,防止函数名冲突导致奇怪的错误。
内容的提问来源于stack exchange,提问作者nba2020
相关产品推荐
相关产品推荐

