R语言中未知回归变量名时如何用lm模型执行predict预测
解决predict函数动态传入变量名的问题
嗨,这个问题我之前也踩过坑!核心原因是你不能直接把动态获取的变量名当作参数名硬写在predict函数里——R的语法不允许这么干。不过别担心,有两个简单靠谱的办法能解决:
方法一:构造带正确列名的数据框
predict函数的newdata参数需要接收一个列名和模型自变量名一致的数据框,所以我们可以先把获取到的变量名设为数据框的列名:
# 先把变量名存起来(方便复用) var_name <- names(my.model$coefficients)[2] # 构造符合要求的新数据框 new_data <- setNames(data.frame(c(40)), var_name) # 执行预测 predict(my.model, newdata = new_data)
如果要预测多个值,比如40、50、60,只需要把c(40)换成c(40,50,60)就行。
方法二:用列表构造新数据
R的predict函数也接受列表作为newdata,只要列表的元素名和模型自变量名匹配:
var_name <- names(my.model$coefficients)[2] # 创建空列表,给它添加对应元素 new_list <- list() new_list[[var_name]] <- c(40) # 执行预测 predict(my.model, newdata = new_list)
为什么原来的写法不行?
你之前写的predict(my.model, names(my.model$coefficients)[2] = c(40))是语法错误——在R里,函数参数的赋值左边必须是固定的变量名,不能是动态计算的表达式(比如names(...)这种)。所以必须先把数据整理成带有正确命名的结构,再传给newdata参数。
内容的提问来源于stack exchange,提问作者DSUR
相关产品推荐
相关产品推荐

