在《R语言实战》中执行“相对权重”代码时出现了一个错误,以下是代码
relweights<-function(fit,...){
r<-cor(fit$model)
nvar<-ncol(r)
rxx<-r[2:nvar,2:nvar]
rxy<-r[2:nvar,1]
svd<-eigen(rxx)
evec<-svd$vectors
ev<-svd$values
delta<-diag(sqrt(ev))
lambda<-evec%*%delta%*%t(evec)
lambdasq<-lambda^2
beta<-solve(lambda)%*%rxy
rsquare<-colSums(beta^2)
rawwgt<-lambdasq%*%beta^2
import<-(rawwgt/rsquare)*100
import<-as.data.frame(import)
row.names(import)<-names(fit$model[2:nvar])
names(import)<-"权重"
import<-import[order(import),1,drop=FALSE]
dotchart(import$"权重",labels=row.names(import),
xlab = "决定系数%",pch = 19,
main="预测变量的相对重要性",
sub=paste("总决定系数=",round(rsquare,digits = 3)),
...)
return(import)
}
带入了一个线性模型,得到了和书本上不一样的情况:
Warning message:
In xtfrm.data.frame(x) : cannot xtfrm data frames
我怀疑是将import转换为数据框时出现了问题,依据这个错误的提示,在github上找到了一个解答方法
isodfSorted <- do.call(rbind,lapply(seq_len(nrow(isodfSorted)),
function(x) { sort(unlist(isodfSorted[x,])) }
))
我将其中isodfSorted替换为import后取代原来的代码,导致函数无法运行。
R版本4.2.0
希望找到解决这个错误的方法