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

未显式调用round_any却报错?integer64类对象适配问题排查

R脚本报错:integer64类型无round_any适用方法

问题详情

调试该R脚本近一个月仍未解决:已知round_any是plyr包的函数,但未加载plyr包,通过ls("package: ")检查所有已加载包均无此函数,网上也未找到相关线索。在browser()中查看报错相关对象类型为double [4] (S3:integer64),目前纠结应将对象类改为非integer64,还是排查并消除round_any的调用。

报错信息

Error in `mutate()`:
! Problem while computing `..2 = across(...)`.
Caused by error in `across()`:
! Problem while computing column `Property Count`.
Caused by error in `UseMethod()`:
! no applicable method for 'round_any' applied to an object of class "integer64"

调用语句

market_stats_table = key_market_stats(historical_stats, historical_stats_by_class, report_quarter)

相关函数代码

total_stats = stats_combined %>% 
    rename(`Net Absorption` = `Net Absorption QTD - Total`, 
           `Net Absorption YTD` = `Net Absorption YTD - Total`,
           `Construction Deliveries` = `Construction Deliveries QTD`) %>% 
    filter(Submarket %in% submarket_order) %>% 
    mutate(Submarket = factor(Submarket, levels = submarket_order, ordered = T)) %>% 
     arrange(Submarket)  %>% 
     mutate(across(c(`Direct Vacancy Rate`, `Overall Vacancy Rate`, `Overall Availability Rate`), scales::percent, accuracy = .1),
            across(any_of(sum_vars), 
                   scales::dollar, accuracy = 1, style_negative="parens", prefix=""),
            across(any_of(c("Full Service Gross Asking Rate", "Lease Rate")),
                   scales::dollar)) %>%
     select(Submarket, all_of(stat_order))
   market_stats_table(total_stats, 
                      cell_width = if_else(property_type == "Office", 1.05, .9), 
                      cell_height = if_else(property_type == "Office", .33, .27),
                      submarket_order,
                      totals)

数据结构

structure(list(Market = c("Los Angeles", "0.4", NA, "0.5", "0.3", 
"New York"), `Property Count` = c("New York", "0.3", NA, "0.2", 
"0.9", "New York"), C = c("Chicago", "0.1", NA, "0.4", "0.3", 
"DC"), D = c("DC", "0.7", NA, "0", "0.2", "DC"), e = c("Miami", 
"0.8", NA, "0.2", "0.1", "Los Angeles")), row.names = c(NA, 6L
), class = "data.frame")

解决方案建议

1. 定位round_any的实际调用源

  • 运行find("round_any")查看该函数的归属包,确认是否是其他依赖plyr的包间接加载了它
  • 在browser()触发报错时,输入traceback()查看完整调用栈,找到哪个函数在调用round_any

2. 处理integer64类型的两种思路

思路一:转换为普通数值类型

如果Property Count不需要保留integer64类型(如仅为计数数据),可在mutate前转换类型:

total_stats = stats_combined %>% 
    mutate(`Property Count` = as.numeric(`Property Count`)) %>%
    # 后续原有代码
    rename(...) %>% 
    filter(...) %>% 
    ...

注意:若integer64存储超大整数,转换为numeric可能丢失精度,计数类数据通常无此问题

思路二:为integer64实现round_any方法

若必须保留integer64类型,可自定义适配方法:

library(bit64)

round_any.integer64 <- function(x, accuracy, f=round) {
  f(as.numeric(x)/accuracy) * accuracy
}

3. 额外排查点

检查key_market_stats或market_stats_table函数内部是否有调用round_any的逻辑,报错发生在处理Property Count列时,大概率是某个格式化函数或自定义逻辑隐式触发了该调用。


内容的提问来源于stack exchange,提问作者wigglesthe3rd

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 10:35:41