我正在尝试移植一些代码以使用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(...)))
}}
答案 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
和[[
编写$
方法。