2012-01-05 2 views
6

Я пытаюсь передать некоторый код для использования пакета mmap. У меня возникла проблема с доступом к столбцам фреймов данных.Доступ к столбцам Frame Data Frame в объектах 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 
... 

Есть ли способ, чтобы сделать работу $ и [[ операторы на памяти отображается объект, так как они были бы на регулярной фрейме данных?

Edit: предложение Per Джошуа я добавил функцию [[

`[[.mmap` <- function(x,...) `[[`(x[],...) 

И $, который, кажется, не особенно элегантно, но, кажется, работает.

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

ответ

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 методы для [[ и $.

+0

Справа @ Joshua, я подумаю о добавлении этих методов, но они могут противоречить дизайну самого класса - не технически, а более философски, если это имеет смысл. Теперь вы можете добавить свои собственные методы, чтобы делать то, что вы хотите. –

+0

Однако [.mmap не отображается в пространстве имен по умолчанию, поэтому для '['. Нет? – aaronjg

+0

@aaronjg: Методы не нужно экспортировать для регистрации. См. «? S3Methods» (в частности, последний абзац раздела «Подробности»). –

Смежные вопросы