我试图移植一些代码来使用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)
这些函数不起作用,因为它们没有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方法。[[$