如何解决错误消息对象“nact”未找到

问题描述 投票:0回答:1

我已经运行了这段代码

# Load the rms package

library(rms)

# Create a small example data frame

example_data <- data.frame(
problems = factor(c(1, 0, 1, 0, 1)),
var = c(1, 2, 3, 4, 5)
)

# Fit a model with only an intercept
fit_example <- lrm(problems ~ 1, data = example_data)

我遇到了这个错误消息 --> lrm 中出现错误(问题~ 1,数据 = example_data):未找到对象“nact”。

错误消息是什么意思以及如何修复它?我正在使用 R 版本 4.4.1

我是一个R新手,在网上搜索过这个问题,没有找到任何东西。

r rms
1个回答
0
投票

这看起来可能是

lrm()
函数本身的错误。

如果您只输入函数名称,末尾不带括号(例如,输入“lrm”,不带引号),您可以看到函数源代码。

您会在末尾处找到一行内容:

 f <- c(f, list(call = call, Design = if (xpres) atr, scale.pred = c("log odds","Odds Ratio"), terms = Terms, assign = ass, na.action = nact, 
                 fail = FALSE, interceptRef = 1, nstrata = nstrata, sformula = sformula))

如果函数在到达该行时尚未创建名为 nact 的变量,则显示

na.action = nact
的行部分会触发错误。

如果您进一步查看代码,您将看到有一个 if 语句,并且在该 if 语句内设置了 nact 的值:

  if (length(atl <- attr(tform, "term.labels")) && any(atl !=".")) {
    X <- Design(data, formula = formula, specials = "strat")
    atrx <- attributes(X)
    sformula <- atrx$sformula
    nact <- atrx$na.action

该 if 语句相应的“else”不包含设置 nact 的行,这就是有时当您到达使用它的行时“nact”不存在的原因。

如果您有 github 帐户,您可以在这里向作者报告错误。

至于如何修复它——目前,要解决该错误,您需要满足条件

length(atl <- attr(tform, "term.labels")) && any(atl !=".")
以结束于 if 语句的前半部分。在深入研究函数代码以找出“tform”是什么之后,为了满足该条件,您的公式似乎需要至少有一个命名的预测变量,而不仅仅是
problems ~ 1

换句话说,现在您不能使用此函数来拟合仅截距模型。

我不太了解这个函数实际上在做什么,不知道它是否应该能够拟合仅截距模型,或者如果你可能试图做一些它不应该做的事情,但它不是很好地告诉你这一点。但无论哪种方式,这里的根本问题是“这个函数不能与你给它的公式一起工作”。

最新问题
© www.soinside.com 2019 - 2024. All rights reserved.