运行R代码时遇“无法将函数类转为数据框”错误求解决方案
问题排查:sparse.model.matrix报错无法将函数转为数据框
原代码
train <- read.csv("train.csv", strings=T) test <- read.csv("test.csv", strings=T) library(gamlr) allX <- rbind(train[,-c(1,81)],test[-1]) allXnaref <- naref(allX, impute=T) modMat <- sparse.model.matrix(~., data=allXnaref)[,-1]
报错信息
Error in as.data.frame.default(data, optional = TRUE) : cannot coerce class ‘"function"’ to a data.frame
排查与解决
这个问题既不是代码本身错误,也不需要修复gamlr包,大概率是你的R环境存在同名对象冲突:
- 先检查
naref的类型:运行class(naref),如果返回"function",说明你当前环境里的naref不是gamlr包提供的处理缺失值的函数,而是被你自己定义的同名函数/变量覆盖了。 - 解决方法二选一:
- 明确指定调用gamlr包的
naref函数,把代码里的naref(allX, impute=T)改成gamlr::naref(allX, impute=T) - 清理环境里的冲突对象:运行
rm(naref),然后重新加载gamlr包library(gamlr)
- 明确指定调用gamlr包的
- 额外验证:运行
class(allXnaref),正常情况下应该返回"data.frame",如果是"function"就说明naref的调用确实出了问题。
内容的提问来源于stack exchange,提问作者Alan Lacson
相关产品推荐
相关产品推荐

