2015-04-01 35 views
6

Tôi đang cố tải một nhóm * .Rdata vào danh sách.Tải các khung dữ liệu vào danh sách

files <- paste0("name", 1:10, ".Rdata") 
data <- lapply(files, load) 

Điều này tạo ra một danh sách, nơi mà trong mỗi phần tử có tên của khung dữ liệu, nhưng không có gì khác.

Nếu tôi xác định lại các file như vậy mà nó chỉ chứa các tập tin đầu tiên, và gọi:

load(files) 

Sau đó là "tác phẩm", nhưng các tập tin trong 'files' được asigned đến môi trường toàn cầu, mà không phải là những gì tôi muốn.

Tôi muốn kết thúc bằng danh sách, trong mỗi phần tử chứa khung dữ liệu. Như vậy thì khi tôi xử lý dữ liệu tôi có thể lapply trên danh sách.

+0

Có thể điều này sẽ giúp http://stackoverflow.com/questions/3764292/loading-many-files-at-once 'lapply (tệp, tải, .GlobalEnv)' – akrun

+0

Vâng tôi biết về điều đó. Nhưng điều đó sẽ tạo ra một loạt các tập tin môi trường toàn cầu, phải không? – Repmat

+0

Xin lỗi, khi tôi nhận xét, tôi chỉ đọc phần đầu tiên – akrun

Trả lời

7

Bạn có thể thử

lapply(files, function(x) mget(load(x))) 

mget sẽ trả về giá trị của đối tượng (hoặc đối tượng) trong một danh sách. Trong các tệp .Rdata của bạn, chỉ có một đối tượng 'data.frame' duy nhất cho mỗi tệp. Vì vậy, ngay cả get cũng hoạt động.

Trong code của bạn,

load(files[1]) 

Đối tượng sẽ được tìm thấy trong môi trường toàn cầu. Giả sử, đối tượng là 'd1', bằng cách gõ 'd1' trên bàn điều khiển, bạn sẽ nhận được giá trị của đối tượng. Cùng một cách

lapply(files, load, .GlobalEnv) 

tải đối tượng trong môi trường toàn cầu và có thể truy cập được bằng cách nhập. Câu hỏi của bạn, mà tôi đoán là để có được các giá trị trong một danh sách và có thể được thực hiện với get hoặc mget.

5

Bây giờ thử nghiệm, không hoạt động!

e1 = new.env() 
invisible(lapply(files, load, envir = e1)) 
my_list = as.list(e1) 
+0

Xin lỗi, nhưng điều này không hoạt động. – Repmat

+0

@ user3551644 Rất tiếc, tất nhiên nó không hoạt động vì 'lapply' không trả về môi trường nên nó không thể lồng nhau được. Đã sửa lỗi. – Gregor

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