data.table:包装期间出错:内部错误:NA存在于'行'传递到C指定

时间:2013-06-19 19:00:46

标签: r data.table

嗯,这对我昨天的功能很好。今天我对这个data.table有以下问题。我无法弄清楚我做错了什么或改变了以获得这种行为:

dtable
   TIF VENUE duration TYPE1 TYPE2 TYPE3 TYPE4 index order_type
1: DAY    NA  1.3e+07    NA   M:0    NA    NA     2         NA
2: DAY    NA  2.0e+06    NA   M:0    NA    NA     4         NA
3: DAY    NA  8.9e+07    NA   M:0    NA    NA     6         NA
4: IOC    NA  0.0e+00    NA    NA    NA    NA     1         NA
5: IOC    NA  0.0e+00    NA    NA    NA    NA     3         NA
6: IOC    NA  0.0e+00    NA    NA    NA    NA     5         NA

Classes:
        TIF       VENUE    duration       TYPE1       TYPE2       TYPE3       TYPE4    index    order_type
   "factor"    "factor"   "numeric"    "factor"    "factor"    "factor"    "factor"   "integer" "character"





cn = "TYPE2"
pattern = "M:?\\n*\\.?\\n*"
tif = "DAY"
> type
[1] mid-peg
Levels: ERROR? GTC? far-peg far-peg ping limit limit ping mid-peg mid-peg ping near-peg near-peg ping

index = grep(pattern, dtable[tif][, get(cn)])
index
> [1] 1 2 3

这失败了:

dtable[tif][index][,"order_type"] = type              
**Error during wrapup: Internal error: NA exist in 'rows' passed to C assign**

这有效:

dtable[tif][grep(pattern, dtable[tif][, get(cn)])][,"order_type"] = type
> dtable
   TIF VENUE duration TYPE1 TYPE2 TYPE3 TYPE4 index order_type
1: DAY    NA  1.3e+07    NA   M:0    NA    NA     2    mid-peg
2: DAY    NA  2.0e+06    NA   M:0    NA    NA     4    mid-peg
3: DAY    NA  8.9e+07    NA   M:0    NA    NA     6    mid-peg
4: IOC    NA  0.0e+00    NA    NA    NA    NA     1         NA
5: IOC    NA  0.0e+00    NA    NA    NA    NA     3         NA
6: IOC    NA  0.0e+00    NA    NA    NA    NA     5         NA

我搞砸了什么?

我认为我的R会话已损坏,因此我提出了一个新会议,但也失败了。

感谢您的时间。

(对不起,第一次使用这个网站所以我不应该在评论部分放置以下内容) 建议使用.... [,order_type: - type]

这是:与上述相同的dtable。我把记忆留在记忆中,上面有相同的标准。

>dtable[tif][grep(pattern, dtable[tif][, get(cn)])][,order_type] 
[1] NA NA NA 

>dtable[tif][grep(pattern, dtable[tif][, get(cn)])][,order_type := type ] 
>dtable[tif][grep(pattern, dtable[tif][, get(cn)])][,order_type] 
[1] NA NA NA 

> type [1] mid-peg. 
[1] mid-peg
Levels: ERROR? GTC? far-peg far-peg ping limit limit ping mid-peg mid-peg ping near-peg near-peg ping

现在这样做,它起作用:

> dtable[tif][grep(pattern, dtable[tif][, get(cn)])][,"order_type"] = type
> dtable[tif][grep(pattern, dtable[tif][, get(cn)])][,order_type] 
[1] "mid-peg" "mid-peg" "mid-peg"

如果这看起来很奇怪,我道歉。当我第一次开始这件事时,我最初尝试过:

>index = grep(pattern, dtable[tif][, get(cn)])
>dtable[tif][index][,order_type := type ]

这没有用。我似乎(或想过)我在2晚前做过以下工作:

>dtable[tif][index][,"order_type"] = type

但现在我收到错误:  内部错误:NA存在于传递给C assign

的“行”中

用这种方法捣乱了一段时间之后,我很惊讶用[替换]索引 [grep(pattern,dtable [tif] [,get(cn)])]工作,因为它应该是相同的东西。所以这让我头疼回到上面的原始问题。

我刚开始使用data.table一个月前。这对我来说是巨大的优势和重大的推动,但我遇到了一些奇怪的怪癖,比如这个。所以我终于认为我应该发布这个,看看我做错了什么,或者我是否以非预期的方式使用data.table。

完全忘记提及,我使用的是R3.0 谢谢大家。

1 个答案:

答案 0 :(得分:1)

dtable[tif][index][,"order_type"] = type
如果dtable中没有名为“index”的列,

将起作用。否则,“index”将被计算为列值,在本例中为(2,4,6),它不会引用dtable [tif]中的有效行号。