首页 > 解决方案 > microsynth 函数中的错误“if (dum <= dum1 + 1) { : 需要 TRUE/FALSE 的缺失值”

问题描述

谁能帮我弄清楚为什么我会收到该microsynth函数的错误代码?

我已经按照教程描述的方式设置了数据,给出了 ID 变量、时间变量(数字)和二进制处理变量。

当我运行以下代码时:

cov.var <- c("age", "sex", "ethgr2", "hh_size", "country_4", 
             "inc_imp", "nssec4", "ten1", "num_adult")
match.out <- c("ov_1", "ov_2", "ov_3", "ov_4")

synth1 <- microsynth(DS, 
                   idvar="seriali", timevar="year_2", intvar="treated", 
                   start.pre=1, end.pre=6, end.post=9, 
                   match.out=match.out, match.covar=cov.var, 
                   result.var=match.out, omnibus.var=match.out,
                   test="lower",
                   n.cores = min(parallel::detectCores(), 2))

我收到此错误:

Error in if (dum <= dum1 + 1) { : missing value where TRUE/FALSE needed

R 不提供对发生错误的位置的引用。此外,在查看函数的源代码时,我看不到在哪里可以提供 TRUE/FALSE。

我尝试按照 microsynth 教程查看是否可以重现该错误。但是,我得到一个不同的错误。

data(seattledmi)
set.seed(99199)
cov.var <- c("TotalPop", "BLACK", "HISPANIC", "Males_1521", "HOUSEHOLDS", 
             "FAMILYHOUS", "FEMALE_HOU", "RENTER_HOU", "VACANT_HOU")
match.out <- c("i_felony", "i_misdemea", "i_drugs", "any_crime")
sea1 <- microsynth(seattledmi, 
                   idvar="ID", timevar="time", intvar="Intervention", 
                   start.pre=1, end.pre=12, end.post=16, 
                   match.out=match.out, match.covar=cov.var, 
                   result.var=match.out, omnibus.var=match.out,
                   test="lower",
                   n.cores = min(parallel::detectCores(), 2))
sea1
Error in colnames(newdat) : object 'newdat' not found

任何建议将不胜感激!

标签: r

解决方案


调试代码后,似乎在microsynth处理tibble对象方面存在一些问题;至少那肯定是第二个错误的来源:函数newreshape尝试运行time.tmp <- data[,timevar],当应用于小标题时不会提取向量(这会导致问题进一步下降)——它应该是例如time.tmp <- dplyr::pull(data, timevar)

即使修复了这个问题,仍然有更多错误,所以我会data.frame在运行代码之前尝试将数据转换为 a,这对我有用:

sea1 <- microsynth(as.data.frame(seattledmi), 
               idvar="ID", timevar="time", intvar="Intervention", 
               start.pre=1, end.pre=12, end.post=16, 
               match.out=match.out, match.covar=cov.var, 
               result.var=match.out, omnibus.var=match.out,
               test="lower",
               n.cores = min(parallel::detectCores(), 2))

这有帮助吗?


推荐阅读