运行trunc(12.34)报错,是否需要重新安装RStudio?
故障原因
这是reticulate包引发的函数命名冲突,完全不需要重装R或者RStudio,不用协调IT走流程。
加载reticulate时,包会把Python侧的同名函数挂载到R的搜索路径优先级更高的位置,你现在调用的trunc()根本不是R base内置的取整函数,而是Python环境里要求传入精度参数p的trunc方法,所以才会报缺少位置参数的错。
验证方式
直接在控制台运行以下命令,查看当前生效的trunc函数归属:
find("trunc")
如果返回结果里排在最前的是reticulate相关环境路径,就能确认是命名覆盖问题。
解决方案
任选以下一种即可修复:
- 单次调用时明确指定使用R内置函数,写全命名空间即可:
运行后会正常返回12,无报错。base::trunc(12.34) - 不想每次手动加前缀的话,在加载
shiny和reticulate之后,加一行代码把函数指回R内置版本:
后续再直接调用library(shiny) library(reticulate) # 追加这行 trunc <- base::trunctrunc()就会和你之前的使用习惯完全一致。
注意:
reticulate作为R和Python的交互包,挂载Python侧函数时经常会出现和R基础函数、其他已加载R包函数重名覆盖的情况,后续如果再遇到参数要求和你认知里的R函数不符的报错,可以优先用find("函数名")查归属,比重装软件排查效率高很多。
内容的提问来源于stack exchange,提问作者Daniel
相关产品推荐
相关产品推荐

