使用MEPDF包epdf函数时触发cube函数报错:找不到函数'.'
解决MEPDF包在R4.1中的epdf函数报错问题
问题根源
报错Error in .(X1, X2) : could not find function "."的核心原因是:MEPDF包基于R3.0开发时,依赖旧版plyr包的语法——.(...)是plyr中list(...)的简写别名。在R4.1环境中,要么未加载plyr包,要么包内的依赖声明失效,导致系统无法识别.函数。
可行解决方案
方案1:手动加载plyr包
在运行示例代码前,先加载plyr包,让系统识别.(...)语法:
library(plyr) library(MASS) library(MEPDF) data <- MASS::mvrnorm(100000, mu = c(0, 0), Sigma = diag(2)) density <- epdf(data,max_corner = c(2,2), min_corner = c(-2,-2), main_gridsize = c(0.05,0.05))
方案2:临时修改cube函数代码
如果加载plyr后仍报错,可通过trace函数临时替换报错代码,将非标准的.(...)改为R原生的list(...):
library(MASS) library(MEPDF) # 触发cube函数的代码编辑窗口 trace("cube", edit = TRUE)
在弹出的编辑器中,找到行:
lst <- eval(parse(text = paste(".(", char, ")", sep = "")))
替换为:
lst <- eval(parse(text = paste("list(", char, ")", sep = "")))
保存后重新运行示例代码即可。
方案3:安装兼容旧版plyr(可选)
若前两种方法无效,可尝试安装与R3.0环境匹配的旧版plyr包:
packageurl <- "https://cran.r-project.org/src/contrib/Archive/plyr/plyr_1.8.4.tar.gz" install.packages(packageurl, repos=NULL, type="source")
安装完成后加载plyr包再执行目标代码。
内容的提问来源于stack exchange,提问作者Osvaldo Assunção
相关产品推荐
相关产品推荐

