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