我有一个名为enc.per.day的数据表,其中记录了每天的就诊情况。它有2403行,指定了服务日期和当天看诊患者人数。我想查看任何类型工作日看诊患者数量的中位数。
enc.per.day[,list(patient.encounters=median(n)),by=list(weekdays(DOS))]
这行代码报错了
[.data.table
(enc.per.day, , list(patient.encounters = median(n)), : 每组计算结果的列类型不一致:第四组的结果中,第1列类型为 'integer' 而期望类型为 'double'
以下所有代码都能正常运行
tapply(enc.per.day$n,weekdays(enc.per.day$DOS),median)
enc.per.day[,list(patient.encounters=round(median(n))),by=list(weekdays(DOS))]
enc.per.day[,list(patient.encounters=median(n)+0),by=list(weekdays(DOS))]
发生了什么?我花了很长时间才弄清楚为什么我的代码不起作用。
顺便提一下,底层向量enc.per.day$n是一个整数。
storage.mode(enc.per.day$n)
返回 "整数"。此外,数据表中没有任何NA值。
DT[ , c(as.double(lapply(.SD,median)) , .N),by=x, .SDcols=c("x", "y", "z")]
而不是DT[ , c(lapply(.SD,median) , .N),by=x, .SDcols=c("x", "y", "z")]
- Bhoom Suktitipatdata.table
v 1.10.4.3 中重现这个错误。在[, (), by=]
之前,patients是整数,然后带有typeof
的 double 类型。2. 通过取整数值的最大值,我创建了类似的错误,确保整数值的最大值是整数...我想发布一个问题,但不确定是否会被标记为重复。3. 结果-Inf
是 R 中的double类型而不是整数值, 所以这里有一些微妙的地方,但我无法表达清楚。 - AdamOas.double(median(x))
并不总是有效。我发现如果我将初始列类型指定为 double(即使它是一系列整数),那么它就可以工作了。 - user3386170