R:将 summary()$coef 转换为数值向量

R: Convert summary()$coef into numeric vector

我正在尝试使用标准曲线(回归线)来分析我的数据。标准曲线看起来类似于:

 myData <- data.frame(x=rep(c(10,1,0.1,0.01),each=3),
                          y=(c(26, 25, 24.5,2.65,2.4,2.5,
                               0.25,0.245,0.265, 0.025,0.027,0.024)))

当我使用函数 lm() 获取回归线,然后使用 coef 接收系数时,效果很好。但是,当我尝试将输出转换为可以在以后的代码中重用的数字向量时,值从原来的值变为 1 和 2。我做错了什么?感谢您的帮助!

xy <- lm(y~x, data=myData) #Intercept(y) = 0.000653277183897452; x = 2.51659647986179 
datOut <- summary(xy)$coef
PPL <- cbind(VariableName=rownames(datOut), datOut)

ppl<-as.data.frame(PPL)
#Results look great

ppl$Estimate<-as.numeric(ppl$Estimate)
#Estimate column content changes to 1 and 2

ppl$Estimate 最初是一个因素。如果您将它直接转换为数字,它将提供因子的水平(因此是 1、2...)。您必须先将其转换为字符 :

ppl$Estimate<-as.numeric(as.character(ppl$Estimate))

或者如 27 ϕ 9 所述,在初始化数据帧时使用 stringsAsFactors = FALSE

永远、永远不要使用 cbind,然后使用 as.data.framecbind 更改了数据类型,因为它创建了一个矩阵,而矩阵只能包含一种数据类型。只需使用 data.frame 之后就不需要“修复”数据类型了:

set.seed(42)
xy <- lm(y~x, data=data.frame(x = rnorm(10), y = rnorm(10))) 
datOut <- summary(xy)$coef

ppl <- data.frame(VariableName=rownames(datOut), datOut)
str(ppl)
#'data.frame':  2 obs. of  5 variables:
#$ VariableName: chr  "(Intercept)" "x"
#$ Estimate    : num  0.237 -0.732
#$ Std..Error  : num  0.616 0.64
#$ t.value     : num  0.385 -1.144
#$ Pr...t..    : num  0.71 0.286