1

我重新运行了大约两个月前以前没有错误的脚本。

我使用 Haven 包上传(非公开和专有SPSS dataset的)和调查包来分析复杂的调查数据。

然而,现在,当我运行一个简单的逻辑回归时,其中两个变量都是虚拟变量(编码为 0 表示否,编码为 1 表示是)......像这样......

f <- read_sav("~/data.sav")
fsd <- svydesign(ids=~1, data=f, weights=~f$weight)
model <- svyglm(exclhlth~male,design=fsd,family=quasibinomial())

...我收到以下错误:

Error: Must subset elements with a valid subscript vector.
x Subscript has the wrong type `omit`.
ℹ It must be logical, numeric, or character.
Run `rlang::last_error()` to see where the error occurred.
> rlang::last_error()
<error/vctrs_error_subscript_type>
Must subset elements with a valid subscript vector.
x Subscript has the wrong type `omit`.
ℹ It must be logical, numeric, or character.
Backtrace:
 1. survey::svyglm(exclhlth ~ male, design = fsd, family = quasibinomial())
 2. survey:::svyglm.survey.design(...)
 4. survey:::`[.survey.design2`(design, -nas, )
 5. base::`[.data.frame`(x$variables, i, ..1, drop = FALSE)
 7. vctrs:::`[.vctrs_vctr`(xj, i)
 8. vctrs:::vec_index(x, i, ...)
 9. vctrs::vec_slice(x, i)
Run `rlang::last_trace()` to see the full context.

我已经尝试在将男性设置为因素的情况下运行它,并且将两者都设置为因素。我得到同样的错误。

从两个月前开始,我已经更新了RRstudio以及避风港和调查包。所以,我猜有些事情发生了变化,但我不知道该怎么做。

SPSS我从去年年底才开始过渡R,所以我提前感谢您的任何指导,并为新手错误提前道歉!

4

1 回答 1

1

好的,您的问题似乎是 RStudio 数据导入函数正在创建劫持下标 ( [) 操作的类。这在之前发生过,当 RStudio 从创建切换data.frame到对象时,但在调用之前tbl使用它就足够了。as.data.frame()svydesign()

在新版本的survey软件包可用之前,您可以尝试使用foreign::read.spss代替haven::read_sav吗?

(另外,如果你能想出一个不那么机密的例子并发送给维护者,我相信他会很感激的。)

更新:问题是na.omithas class的输出omit,并且一些变量有 class haven_labelled,并且子集运算符 forhaven_labelled对其参数的类非常挑剔:它必须是纯整数或逻辑,没有类。

该类的帮助labelled建议使用haven::as_factorhaven::zap_labels将这些标记的向量强制为标准 R 类。

进一步更新:我为该包提交了一个 github 问题,该问题haven已移至该vctrs包,因此此行为可能会更改。

进一步进一步更新:这在开发版本中修复vctrs

于 2020-06-21T07:39:01.173 回答