You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

解决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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 06:34:11