微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

R:错误-rep.intc1,numericn,n-1L错误:无效的“时间”值

如何解决R:错误-rep.intc1,numericn,n-1L错误:无效的“时间”值

我已经仔细研究了类似错误的响应,但似乎找不到适合我的解决方案。我正在尝试为相对较小的数据集(nrow = 378)设置回归的一些对比,并且在尝试创建对比时出现标题错误。我正在运行的命令是:

d$contrasts <- varContrasts(d$Media.Type,Type = 'Dummy',RefLevel = 4)

有人知道这里发生了什么吗?相同的代码对我来说适用于不同的数据集。

编辑:为回应Paul的评论,这是dput(d $ Media.Type)的输出

    dput(d$Media.Type)
c("2","3","4","2","1","1")

解决方法

varContrasts需要一个factor,但您的数据是character。只需将其转换为factor

lmSupport::varContrasts(
  as.factor(x),Type = 'Dummy',RefLevel = 4
)
#>   1_v_4 2_v_4 3_v_4
#> 1     1     0     0
#> 2     0     1     0
#> 3     0     0     1
#> 4     0     0     0

以下不是造成您问题的原因,但此错误最常见的情况是在存在“ NA”的情况下。

这是一个没有错误的示例。

x <- factor(1:5)
lmSupport::varContrasts(x,RefLevel = 4)
#> 1_v_4 2_v_4 3_v_4 5_v_4
#> 1     1     0     0     0
#> 2     0     1     0     0
#> 3     0     0     1     0
#> 4     0     0     0     0
#> 5     0     0     0     1
#> 1_v_4 2_v_4 3_v_4 5_v_4
#> 1     1     0     0     0
#> 2     0     1     0     0
#> 3     0     0     1     0
#> 4     0     0     0     0
#> 5     0     0     0     1

但是如果有NA,我们会收到错误消息。

x2 <- c(x,NA)
lmSupport::varContrasts(x2,RefLevel = 4)
#> Error in rep.int(c(1,numeric(n)),n - 1L) : invalid 'times' value

这些需要以某种方式处理。例如,创建一个新级别Missing

x3 <- as.factor(tidyr::replace_na(x2,"Missing"))
#> lmSupport::varContrasts(x3,RefLevel = 4)
#> 1_v_4 2_v_4 3_v_4 5_v_4 Missing_v_4
#> 1           1     0     0     0           0
#> 2           0     1     0     0           0
#> 3           0     0     1     0           0
#> 4           0     0     0     0           0
#> 5           0     0     0     1           0
#> Missing     0     0     0     0           1
#> 1_v_4 2_v_4 3_v_4 5_v_4 Missing_v_4
#> 1           1     0     0     0           0
#> 2           0     1     0     0           0
#> 3           0     0     1     0           0
#> 4           0     0     0     0           0
#> 5           0     0     0     1           0
#> Missing     0     0     0     0           1

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。