jsonlite将弃用asJSON(keep_vec_names=TRUE)参数及R代码问题咨询
解决jsonlite
asJSON(keep_vec_names=TRUE) 弃用警告问题 你遇到的这个警告是因为jsonlite的未来版本会移除对**命名向量传入keep_vec_names=TRUE**的支持,而你用到的manipulateWidget包(和Shiny关联的那个)底层可能调用了这个即将被弃用的用法。下面给你几个可行的解决思路,还有补全后的可运行代码示例:
一、核心修复思路
1. 遵循jsonlite新规范处理命名向量
jsonlite官方推荐把命名向量转换成列表再处理,这样完全不需要依赖keep_vec_names参数,生成的JSON结构和之前的效果一致。比如原来的代码如果是:
asJSON(your_named_vector, keep_vec_names = TRUE)
直接改成:
asJSON(as.list(your_named_vector))
这是最稳妥的长期解决方案。
2. 适配manipulateWidget的临时/永久方案
- 优先升级依赖包:先把manipulateWidget和jsonlite都更到最新版本,大概率开发者已经修复了这个兼容性问题,直接升级就能解决警告。
- 临时兼容hack(谨慎使用):如果暂时没法升级,可以在你的Shiny应用或者脚本开头添加一段代码,临时覆盖jsonlite的向量处理逻辑,保留
keep_vec_names的支持:
注意:这只是过渡方案,长远来看还是建议升级包或者调整代码逻辑,避免后续版本出现报错。assignInNamespace( "asJSON.vector", function(x, ..., keep_vec_names = TRUE) { jsonlite:::asJSON.vector(x, ..., keep_vec_names = TRUE) }, ns = "jsonlite" )
二、补全后的可复现代码
我把你提供的代码补全,加上了兼容处理的选项,确保能正常运行:
library(ggplot2) library(plotly) library(manipulateWidget) library(data.table) library(jsonlite) # 可选:添加临时兼容处理(如果升级包后仍有警告再用) # assignInNamespace("asJSON.vector", function(x, ..., keep_vec_names = TRUE) jsonlite:::asJSON.vector(x, ..., keep_vec_names = TRUE), ns = "jsonlite") my_data <- data.table( DAT_RLV = as.POSIXct(c("2017-01-20","2017-01-21","2017-01-22", "2017-01-23","2017-01-24")), VOL_CSO = c(0,4,3,4,2)) graphe_conso <- ggplot(data = my_data)+ geom_line(aes(x = DAT_RLV,y = VOL_CSO),colour = "darkgreen")+ labs(x = "Date", y = "My Value") + theme_minimal() # 用manipulateWidget交互式展示图表 manipulateWidget( plotly::ggplotly(graphe_conso), # 示例控件:日期范围选择器 date_range = mwDateRange(min = my_data$DAT_RLV, max = my_data$DAT_RLV) )
如果尝试以上方法后还是有问题,你可以去manipulateWidget的官方仓库提交issue,说明这个jsonlite版本兼容的问题,开发者应该会很快跟进修复。
内容的提问来源于stack exchange,提问作者JeanBertin
相关产品推荐
相关产品推荐

