在R< data.table中使用键的奇怪行为(错误?)

时间:2014-10-15 21:43:09

标签: r key data.table

我发现我相信data.table中的一个错误让我疯狂。我试图创建一个最小的工作示例,但我很难这样做 - 所以我提供了一个用于复制的数据集。我使用的是R版本3.1.0,数据表1.9.4。

以下是问题症结的一个例子:

> log[select==1,list(trials=tabulate(select)),by=subj]

报告主题29的值为“65”

> log[select==1 & subj==29,list(trials=tabulate(select)),by=subj]

报告主题29的值为“85”。即使没有看到其余的代码,它们应该是相同的,不是吗?


详细信息:数据文件“log.csv”可用@ http://pastebin.com/ZwD7enxj

和我的R代码:

library(data.table)
log <- NULL
log <- fread('log.csv')

setkey(log,subj)

fun1 <- function() {
    log[,select:= 1]
    log[blocktime==10 | rt>10.0,select := 0]
    log[log[select==1,mean(correct),by=subj],avgACC := V1]
}

fun2 <- function () {
    log[blocktime==1 | blocktime==5,select := 1]
    log[select==1,list(trials=tabulate(select)),by=subj] 
}

现在,如果我在fun2()之前运行fun1(),我会看到上面提到的错误行为。如果我在fun1()之前运行fun2(),它似乎工作正常。

明显的修复:
- 删除fun1()中的最后一行 - 在fun2()的开头添加setkey(log,subj)也解决了问题

这到底发生了什么?如果这是期望的行为,那就非常混乱。

0 个答案:

没有答案