当尝试使用快速箱的shglm函数时,我遇到了一个问题。由于文件太大,无法读入内存,所以我想使用包的帮助页中概述的链接函数。链接函数是
make.data<-function(filename, chunksize,...){
conn<-NULL
function(reset=FALSE){
if(reset){
if(!is.null(conn)) close(conn)
conn<<-file(filename,open="r")
} else{
rval<-read.table(conn, nrows=chunksize,...)
if ((nrow(rval)==0)) {
close(conn)
conn<<-NULL
rval<-NULL
}
return(rval)
}}}
load(ti.RData)然后,我将我的数据帧(称为ti)写到表中。
write.table(ti,"data1.txt",row.names=FALSE,col.names=FALSE)如这里的示例所示,http://www.inside-r.org/packages/cran/speedglm/docs/shglm。之后
da<-make.data("data1.txt",chunksize=10000,col.names=colnames(ti))
rm(ti)
b1<-shglm(T2D~factor(SIBCO)+factor(POCOD),datafun=da,family=binomial())但我犯了个错误
Error in dev.resids(y, mu, weights) :
argument mu must be a numeric vector of length 1 or length 802我很高兴上传我的数据集,但有人可以粗略地告诉我从哪里开始调试吗?我认为当通过链接函数(使用read.table)读取data1.txt时,原始数据帧中的一些因素通过这个操作转换为整数。这就是我把因子放在变量周围的原因。任何建议都会很有帮助
发布于 2015-11-19 17:26:21
简单的回答是,您的输入数据可能有问题。如果没有输入数据,很难说,但根据我使用带有因素的二项式glm运行shglm的经验,这是我要从这里开始的。
作为一般调试策略,您可以尝试如下所示:
debug(shglm)和options(error=recover)行添加到脚本中trace=T选项source("myscript.R")的形式加载脚本ls()查看当前存在的变量,并使用dim()、colnames()等检查它们。现在,在我的经验中,shglm返回非常神秘的错误消息,这些错误消息可能会根据输入块的大小而改变(因为这会改变数据和模型所知道的因素)。下面,我列出了一些需要检查数据的内容,以及在使其正常工作时遇到的一些常见错误,这可能有助于您运行自己的模型。
关于数据,请确保:
Error in if (any(y < 0 | y > 1)) stop("y values must be 0 <= y <= 1") : missing value where TRUE/FALSE needed Calls: shglm -> eval -> eval
factor(age, levels("24andbelow, 25to49, "50to74", "75andover")),否则您将得到以下错误:Error in crossprod(weights, y) : non-conformable arguments Calls: shglm -> crossprod -> crossprod
Error in XTX[rownames(Ax), colnames(Ax)] : subscript out of bounds Calls: shglm
现在我没有得到你的具体错误,而是一些足够近的东西,我认为我应该提到。在这里,我尝试提供一个包含两列的公式(在常规glm中可以用于成功和失败),即cbind(成功,失败)~factor(Var1)+ factor(var2)。
Error in dev.resids(y, mu, weights) : argument wt must be a numeric vector of length 1 or length 10 Calls: shglm -> dev.resids
我想主要是检查您的输入数据。
https://stackoverflow.com/questions/27626202
复制相似问题