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

时间:2012-01-05 18:54:40

标签: 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
...

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

编辑: 根据约书亚的建议,我为[[

添加了一个函数
`[[.mmap` <- function(x,...) `[[`(x[],...)

$而言似乎并不特别优雅,但似乎有效。

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

1 个答案:

答案 0 :(得分:2)

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

> grep("mmap",methods("["),value=TRUE)
[1] "[.mmap"
> grep("mmap",methods("[["),value=TRUE)
character(0)
> grep("mmap",methods("$"),value=TRUE)
character(0)

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