1

さて、これは昨日私が持っている機能でうまくいきました。今日、この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 の割り当てに渡された「行」に存在します

しばらくこれをいじった後、 [index] を [grep(pattern, dtable[tif][, get(cn)])] に置き換えても同じはずなのに驚いた。そのため、上記の元の問題に頭を悩ませました。

約1か月前にdata.tableを使い始めました。それは私にとって大きな利点であり、大きな後押しでしたが、私が遭遇した奇妙な癖がいくつかあります。だから私は最終的に、私が間違っていること、または意図しない方法で data.table を使用しているかどうかを確認するために、これを投稿する必要があると考えました。

すっかり言い忘れていましたが、R3.0を使っています ありがとうございます。

4

1 に答える 1

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

dtable に「index」という名前の列がない場合に機能します。それ以外の場合、「インデックス」は列の値として評価されます。この場合は (2,4,6) であり、dtable[tif] の有効な行番号を参照しません。

于 2013-06-24T15:54:42.997 に答える