data.table:wrapup期间出错:内部错误:NA存在于';行';传递给C赋值

data.table:wrapup期间出错:内部错误:NA存在于';行';传递给C赋值,r,data.table,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

好吧,这对我昨天的工作很好。今天,我对这个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会话已损坏,所以我提出了一个新会话,它也失败了

谢谢你抽出时间

(对不起,伙计们,我是第一次使用这个网站,所以我不应该把下面的内容放在评论部分) 建议使用……[,订单类型:-类型]

这里是:与上面相同的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 ]
这不管用。两天前的晚上,我似乎(或认为)我做了以下工作:

>dtable[tif][index][,"order_type"] = type
但现在我得到了一个错误: 内部错误:NA存在于传递给C assign的“行”中

在处理了一段时间之后,我很惊讶用 [grep(pattern,dtable[tif][,get(cn)]]的工作原理应该是一样的。因此,这让我抓挠我的头回到原来的问题上面的方式

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

完全忘了提到,我使用的是R3.0 谢谢大家

dtable[tif][index][,"order_type"] = type
如果数据表中没有名为“index”的列,则此选项将起作用。否则,“索引”将作为列值计算,在本例中为(2,4,6),它不会引用dtable[tif]中的有效行号


如果数据表中没有名为“index”的列,则此选项将起作用。否则,“index”将作为列值进行计算,在本例中是(2,4,6),它不会引用dtable[tif]中的有效行号。

我不知道您在做什么,但我想您希望在表达式的末尾使用此值:
…[,order\u type:=type]
是的,这是我最初做的,它什么也没做。这就是为什么我用最后一种方式展示它。仅供参考,我确实有:dtable[tif][index,order_type:=type]没有骰子。尝试了不同的组合。谢谢你的回复。什么都不做,我的意思是order_type列没有改变,从初始化时就保留了所有NA。试着分离出一个可重复的示例:与上面相同的dtable。我将exmaple留在记忆中,上面的参数与我相同。>数据表[tif][grep(pattern,dtable[tif][,get(cn)]][,order_type][1]NA NA数据表[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.编辑您的问题以包括这些示例。在注释中很难理解我不知道你在做什么,但我想你希望在表达式的末尾有这样的内容:
…[,order\u type:=type]
是的,那是我最初做的,它什么也没做。这就是为什么我用最后一种方式展示它。仅供参考,我确实有:dtable[tif][index,order_type:=type]没有骰子。尝试了不同的组合。谢谢你的回复。什么都不做,我的意思是order_type列没有改变,从初始化时就保留了所有NA。试着分离出一个可重复的示例:与上面相同的dtable。我将exmaple留在记忆中,上面的参数与我相同。>数据表[tif][grep(pattern,dtable[tif][,get(cn)]][,order_type][1]NA NA数据表[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.编辑您的问题以包括这些示例。在评论中很难理解