好吧,昨天在我拥有的功能中,这对我来说效果很好。今天我对这个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 ]
这没有用。我确实似乎(或认为)两天前我有以下工作:
>dtable[tif][index][,"order_type"] = type
但现在我收到错误:内部错误:NA 存在于传递给 C 分配的“行”中
在处理了一段时间之后,我很惊讶用 [grep(pattern, dtable[tif][, get(cn)])] 替换 [index] 可以正常工作,因为它应该是同一件事。所以这让我挠头回到上面的原始问题。
我大约一个月前才开始使用 data.table 。这对我来说是很大的优势和巨大的推动力,但我遇到了一些奇怪的怪癖,比如这个。所以我终于想我应该把它发布在那里,看看我做错了什么,或者我是否以非预期的方式使用 data.table。
完全忘了提,我用的是R3.0 谢谢大家。