6
我試圖移植一些代碼來使用mmap包。我在訪問數據框列時遇到問題。在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(...)))
}}
Right @Joshua,我會考慮將這些添加爲方法 - 但它們可能與類本身的設計相沖突 - 不是技術上的,而是更具哲理性的,如果這是有道理的。現在你可以添加你自己的方法來做你想做的事情。 – 2012-01-05 19:06:48
但是,[.mmap對默認名稱空間不可見,所以必須爲'['調度其他方法。沒有? – aaronjg 2012-01-05 19:07:48
@aaronjg:方法不一定要導出才能註冊。參見'?S3Methods'(特別是Details部分的最後一段)。 – 2012-01-05 19:21:35