我有一个函数,我正在使用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()以避免可能的混淆。
答案 0 :(得分:2)
以下是您的问题的解决方案,以及部分解释:
具体地:
env <- new.env()
env$selectnum = 5
设置你的功能:
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)
}
现在尝试一下:
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>