R语言计算倾向得分代码报错:找不到指定匿名函数
R计算倾向得分报错"could not find function..."问题解决
问题重现
用户运行以下代码计算倾向得分时出现错误:
执行代码
# 添加包与特征 install.packages('MatchIt') library(MatchIt) ldata <- MatchIt::lalonde ldata$hispan <- ifelse(ldata$race=='hispan',1,0) ldata$white <- ifelse(ldata$race='white',1,0) # 计算倾向得分的模型 propscores <- fitted.values(glm(treat~age+educ+white+hispan+married+nodegree+re74+re75, family=binomial, data=ldata))
返回错误
Error in `function (object, ...) object`(list(treat = c(1L, 1L, 1L, : could not find function "function (object, ...) object"
用户反馈该代码在教授环境可正常运行,自身环境报错,已尝试加载glmnet包仍未解决。
错误原因
- 语法错误:创建
white变量时误用赋值符号=代替比较符号==,这会直接修改ldata$race的原始值,导致数据逻辑混乱,触发后续异常。 - 函数被覆盖:R环境中的
fitted.values函数被意外替换成了一个无效的匿名函数,导致无法正常提取GLM模型的拟合值。
解决办法
1. 修复语法错误
将创建white变量的代码中的=改为==:
ldata$white <- ifelse(ldata$race=='white',1,0)
2. 恢复原始fitted.values函数
如果是函数被覆盖,运行以下代码移除无效定义,恢复基础包的原始函数:
rm(fitted.values)
或者直接调用stats包的原始函数,避免环境干扰:
propscores <- stats::fitted.values(glm(treat~age+educ+white+hispan+married+nodegree+re74+re75, family=binomial, data=ldata))
3. 替代方案:使用fitted()函数
fitted()是fitted.values()的官方别名,兼容性更好,可直接替换使用:
propscores <- fitted(glm(treat~age+educ+white+hispan+married+nodegree+re74+re75, family=binomial, data=ldata))
内容的提问来源于stack exchange,提问作者Moosa ali
相关产品推荐
相关产品推荐

