Доступ к столбцам фрейма данных в объектах R mmap - PullRequest
6 голосов
/ 05 января 2012

Я пытаюсь портировать некоторый код для использования пакета 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 Ответ

2 голосов
/ 05 января 2012

Эти функции не работают, потому что у них нет метода mmap.

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

Поэтому они отправляют методы по умолчанию, которые не знают, как обрабатывать объект mmap. Вам нужно написать mmap методы для [[ и $.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...