r语言 - data.table:总结期间的错误:内部错误:NA 存在于传递给 C 分配'rows'



嗯,昨天在我拥有的函数中这对我来说效果很好。 今天我在这个数据表上遇到了以下问题。 我无法弄清楚我做错了什么或改变了什么以获得这种行为:

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 :- 类型 ]

这是:与上面相同的表。我把这个例子留在了记忆中,上面有同样的胳膊。

>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 分配的"行"中

在用这个弄了一段时间后,我很惊讶将 [index] 替换为[grep(pattern, dtable[tif][, get(cn(](] 工作,因为它应该是同一件事。 所以这让我挠头回到上面的原始问题。

大约一个月前,我刚开始使用data.table。 这对我来说是巨大的优势和重大推动力,但我遇到了一些奇怪的怪癖,比如这个。 所以我最后认为我应该把它发布在那里,看看我做错了什么,或者我是否以不想要的方式使用 data.table。

完全忘了提,我正在使用R3.0谢谢大家。

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

如果 dtable 中没有名为"索引"的列,将起作用。 否则,"index"被评估为列值,在本例中为 (2,4,6(,它不会引用 dtable[tif] 中的有效行号。

相关内容

最新更新