嗯,这对我昨天的功能很好。今天我对这个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 谢谢大家。
答案 0 :(得分:1)
dtable[tif][index][,"order_type"] = type
如果dtable中没有名为“index”的列,将起作用。否则,“index”将被计算为列值,在本例中为(2,4,6),它不会引用dtable [tif]中的有效行号。