错误消息"尝试在NULL"上设置属性在R

时间:2014-04-12 12:26:06

标签: r nullreferenceexception

我将自己阅读统计教科书。我正在使用半官方代码(来自其他人编写的手册,但链接在教科书的网站上)来计算示例和练习。

该代码包括用于拟合广义线性模型的函​​数。我从手册中输入它并按照建议运行它。虽然实际拟合有效,但在为结果分配标签时会出现上述错误。

抛出错误的行是

names(fit$part) <- dn 

此时,dn的值为[1] "(Intercept)" "Var1"fit$par的值为[1] -5.9604611 0.3165604

我没有看到任何NULL,并想知道什么可能导致错误。

完整的代码是:

ct <- data.frame(alcohol.comsumption = c("0", "<1", "1-2", "3-5", ">= 6"), scores=c(0, 0.5, 1.5, 4, 7), absent = c(17066, 14464, 788, 126, 37), present = c(48, 38, 5, 1, 1))

n <- ct$absent + ct$present
alc.consumption <- rep(ct$scores, n)
y <- rep(rep(c(1,0), nrow(ct)), c(rbind(ct$present, ct$absent)))

logitreg <- function(x, y, wt = rep(1, length(y)), intercept = T, start = rep(0, p), ...)
{
  if(!exists("optim")) library(MASS)
  fmin <- function(beta, X, y, w) {
    p <- plogis(X %*% beta)
    -sum(2 * w * ifelse(y, log(p), log(1-p)))
  }
  gmin <- function(beta, X, y, w)
  {
    eta <- X %*% beta; p<-plogis(eta)
    t(-2 * (w *dlogis(eta) *ifelse(y, 1/p, -1/(1-p))))%*% X
  }
  if(is.null(dim(x))) dim(x) <- c(length(x),1)
  dn <- dimnames(x)[[2]]
  if(!length(dn)) dn <- paste("Var", 1:ncol(x), sep="")
  p <- ncol(x) + intercept
  if(intercept) {x <- cbind(1, x); dn <- c("(Intercept)", dn)}
  if(is.factor(y)) y <- (unclass(y) != 1)
  fit <- optim(start, fmin, gmin, X=x, y=y, w=wt, ...)

  # --- Next line throws the error --- #

  names(fit$part) <- dn 
  cat("\nCoefficients:\n"); print(fit$par)
  cat("\nResidual Deviance:", format(fit$value), "\n")
  cat("\nConvergence message:", fit$convergence, "\n")
  invisible(fit)
}

logit.fit<-logitreg(x=alc.consumption, y=y, hessian=T, method="BFGS")

1 个答案:

答案 0 :(得分:4)

您或您的图书作者将names(fit$par)误认为names(fit$part),但不存在。