R读取txt运行回归报Non-numeric argument to mathematical function如何解决
报错原因分析
触发该报错的直接原因是log()函数只能接收数值型输入,你传入的e29[, 1]不属于数值类型,无法执行对数运算。
根本原因是读取数据集时参数设置错误:你调用read.table时设置了head = F(即不把第一行识别为表头),但该数据集的第一行本身就是列名字符串,读入时R会将这行字符串作为普通数据存入各列,导致原本全为数值的列因为混入了字符串内容,被自动判定为字符型或因子型,自然无法传入数学函数执行计算。
问题验证
你可以运行以下代码确认上述判断:
# 查看数据集各列类型和前几行数据 str(e29) head(e29)
运行后可以看到第一行是字符串格式的列名,第1、4、7列的类型都不是数值型。
解决方法
修改read.table的表头识别参数,将head = F改为head = T,正确识别表头即可,修正后的完整代码如下:
e29 <- read.table("http://www.stat.nthu.edu.tw/~swcheng/Teaching/stat5410/data/E2.9.txt", head = T, fill = T) regr_e29 <- lm(log(e29[ ,7]) ~ log(e29[ ,1]) + log(e29[ ,4]), data = e29) summary(regr_e29)
内容的提问来源于stack exchange,提问作者Jennie C.
相关产品推荐
相关产品推荐

