2012-01-05 37 views
6

Tôi đang cố gắng chuyển một số mã để sử dụng gói mmap. Tôi gặp sự cố khi truy cập cột khung dữ liệu.Truy cập cột khung dữ liệu trong đối tượng R mmap

Tôi muốn có thể truy cập cột dữ liệu với các toán tử $[[. Đây là kết quả tôi đang nhận được.

> 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 
... 

Có cách nào để làm cho $[[ khai thác làm việc trên các đối tượng bộ nhớ ánh xạ, như họ sẽ trên một khung dữ liệu thường xuyên?

Edit: gợi ý mỗi Joshua của tôi đã thêm một chức năng cho [[

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

Và đối với $ mà không có vẻ đặc biệt thanh lịch, nhưng dường như làm việc.

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

Trả lời

2

Các chức năng này không hoạt động vì chúng không có phương thức mmap.

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

Do đó, họ cử các phương pháp mặc định, mà không có ý tưởng làm thế nào để xử lý một đối tượng mmap. Bạn sẽ cần phải viết các phương thức mmap cho [[$.

+0

Phải @Joshua, tôi sẽ suy nghĩ về việc thêm những phương thức này - nhưng chúng có thể xung đột với thiết kế của lớp - không phải về mặt kỹ thuật, nhưng về mặt triết học, nếu điều đó có ý nghĩa. Để bây giờ bạn có thể thêm các phương pháp của riêng bạn để làm những gì bạn muốn. –

+0

Tuy nhiên, [.mmap không hiển thị với không gian tên mặc định, vì vậy một số phương thức khác phải được gửi đi cho '['. Không? – aaronjg

+0

@aaronjg: Các phương thức không cần xuất khẩu để được đăng ký. Xem '? S3Methods' (cụ thể là đoạn cuối cùng của phần Chi tiết). –

Các vấn đề liên quan