访问R mmap对象中的数据框列

aar*_*njg 6 r

我试图移植一些代码来使用mmap包.我在访问数据框列时遇到问题.

我希望能够使用$[[运算符访问数据列.这是我得到的结果.

> foo <- as.mmap(mtcars)
> foo[,'mpg'] # works
    mpg
1  21.0
2  21.0
3  22.8
4  21.4
5  18.7
 ...
> foo$mpg #does not work
NULL
> foo[['mpg']] #also does not work
NULL
> foo[]$mpg #works
...
> foo[][['mpg']] #also works
...
Run Code Online (Sandbox Code Playgroud)

有没有办法让$[[运算符在内存映射对象上工作,就像它们在常规数据帧上一样?

编辑:根据约书亚的建议,我添加了一个功能 [[

`[[.mmap` <- function(x,...) `[[`(x[],...)
Run Code Online (Sandbox Code Playgroud)

而且$这似乎并不特别优雅,但似乎有效.

> `$.mmap` <- function(x,...) {
  if (...%in%c("storage.mode","bytes","extractFUN","filedesc")){
    get(...,envir=x) 
  }else {
    eval(call('$',x[],substitute(...)))
  }}
Run Code Online (Sandbox Code Playgroud)

Jos*_*ich 2

这些函数不起作用,因为它们没有mmap方法。

> grep("mmap",methods("["),value=TRUE)
[1] "[.mmap"
> grep("mmap",methods("[["),value=TRUE)
character(0)
> grep("mmap",methods("$"),value=TRUE)
character(0)
Run Code Online (Sandbox Code Playgroud)

因此,它们分派到默认方法,这些方法不知道如何处理mmap 对象。您需要为和编写mmap方法。[[$