1

rxXdfToDataFrame を使用して xdf ファイルを読み取り、rowSelection の式で変数を使用する関数があります。を渡さないtransformEnvir=environment()と、変数が見つかりません。私の問題は、 で関数を呼び出した後transformEnvir、 に確実にアクセスできないように見えることです.GlobalEnv。数値をハードコーディングするとrowSelection、使用する必要がなくなりtransformEnvir、すべてが正しく機能します。環境を設定しようとしましたが、正しく行っていたかどうかさえわかりません。

次のコードは私の問題を再現します:

envirtest = function()
{
   require(data.table)
   df = data.frame(x=1:10)
   selectnum = 5
   rxDataFrameToXdf(df, "testxdf.xdf")
   testdf = rxXdfToDataFrame("testxdf.xdf",rowSelection=(x==selectnum),transformEnvir=environment())
   testdt = setDT(testdf)
}

発生するエラー:

Error in envirtest() : could not find function "setDT"

ただし、代わりにsetDT(),data.table::setDT()を使用すると、関数が実行されます。

編集:設定せずに試してみたところtransformEnvir、すべてが正常に機能したことを忘れていました。また、混乱を避けるために、tables() が setDT() に変更されました。

4

1 に答える 1

2

Here is a solution to your problem, together with a partial explanation:

  • At the completion of the transformation, the transformation environment gets cleared.
  • This means it is safer to create an environment and then adding any objects into this environment before starting the rx-function.

Concretely:

env <- new.env()
env$selectnum = 5

Set up your function like this:

envirtest = function()
{
  require(data.table)
  df = data.frame(x=1:10)
  env <- new.env()
  env$selectnum = 5

  rxDataFrameToXdf(df, "testxdf.xdf", overwrite=TRUE)
  testdf <- rxXdfToDataFrame("testxdf.xdf",
                             rowSelection=(x==selectnum),
                             transformEnvir=env
  )
  setDT(testdf)
}

Now try it:

x <- envirtest()

Rows Read: 10, Total Rows Processed: 10, Total Chunk Time: 0.006 seconds 
Rows Processed: 1
Time to read data file: 0.00 secs.
Time to convert to data frame: less than .001 secs.

str(x)

Classes ‘data.table’ and 'data.frame':  1 obs. of  1 variable:
 $ x: int 5
 - attr(*, ".internal.selfref")=<externalptr> 
于 2014-06-19T07:16:44.440 に答える