2015-03-16 21 views
23

Khi sử dụng dplyr, các tbl_df chức năng in một tuyên bố nói rằng các khung dữ liệu là "địa phương":Ý nghĩa của thông báo "khung dữ liệu cục bộ" từ `dplyr ::: print.tbl_df` là gì?

> mtcars %>% 
+  group_by(gear) 
Source: local data frame [32 x 11] 
Groups: gear 

    mpg cyl ... 
1 21.0 6 ... 

Tôi nghĩ một khung dữ liệu địa phương có nghĩa là trong bộ nhớ, và một khung dữ liệu không địa phương là một cơ sở dữ liệu như SQL. Tôi nghĩ rằng tôi sai trong giả định đó, mặc dù. Trong này tutorial video vào khoảng 25:25, Kevin Markham nói rằng data.frame đối tượng không phải là khung dữ liệu địa phương, mà tôi tin rằng họ.

Tôi đã xem qua tài liệu tbl_df và sử dụng chức năng tìm kiếm trong dplyr introduction vignette, nhưng không thể tìm thấy mô tả về khung dữ liệu cục bộ.

Câu hỏi:Khung dữ liệu cục bộ là gì?

+6

Nó chỉ phân biệt nó với nguồn dữ liệu từ xa như cơ sở dữ liệu MySQL hoặc thứ gì đó. – joran

+3

Nếu video được liên kết là chính xác, các đối tượng 'data_frame' là các khung dữ liệu cục bộ, nhưng các đối tượng' data.frame' thì không. Bây giờ tôi cũng bối rối. – patabongo

+2

Tôi không nghĩ rằng @Tyler là sai trong giả định ban đầu, và có một số ngữ nghĩa tại nơi làm việc. Có lẽ, phù hợp với tài liệu và tuyên bố Kevin Markham, người ta có thể nói một "khung dữ liệu địa phương" là dữ liệu được bao bọc bởi tbl_df tạo ra từ một data.frame, mà không phải là chính nó là một 'khung dữ liệu địa phương cho đến khi bọc? – jaimedash

Trả lời

1

http://www.inside-r.org/packages/cran/dplyr/docs/tbl_df

Một tbl khung dữ liệu kết thúc tốt đẹp một khung dữ liệu địa phương. Ưu điểm chính khi sử dụng tbl_df trên khung dữ liệu thông thường là in: đối tượng tbl chỉ in một vài hàng và tất cả các cột vừa với một màn hình, cung cấp mô tả phần còn lại của nó dưới dạng văn bản.

từ

http://cran.r-project.org/web/packages/dplyr/dplyr.pdf

phá miền địa phương Lưu ý rằng cho khung dữ liệu địa phương, đặt hàng được thực hiện trong C++ mà không có quyền truy cập để đặt hàng cụ thể ở địa phương thường được thực hiện trong R. Điều này có nghĩa rằng chuỗi là ra lệnh, nếu như trong locale C

8

tôi là tác giả của video tutorial đề cập trong câu hỏi. Dưới đây là một bản tóm tắt các chức năng liên quan đến cuộc thảo luận này:

  • data.frame() là chức năng R để tạo thường xuyên khung dữ liệu.
  • data_frame() là chức năng của dplyr để tạo các khung dữ liệu cục bộ.
  • tbl_df()as_data_frame() là chức năng dplyr cho chuyển đổi một khung dữ liệu thường xuyên (hoặc một danh sách) vào một khung dữ liệu địa phương.

Vì vậy, sự khác biệt giữa thường xuyênkhung dữ liệu địa phương là gì? Rất ít. Khung hình cục bộ chỉ là thường xuyên khung dữ liệu đã được gói với lớp tbl_df để in đẹp hơn. (Số liệu vẫn được lưu giữ trong một thường xuyên khung dữ liệu "under the hood".)

Cụ thể, in một địa phương khung dữ liệu chỉ cho thấy 10 dòng đầu tiên, và như nhiều cột như thể phù hợp trên màn hình của bạn .(Bạn có thể xem ví dụ về hành vi này ở phía trên cùng của số RMarkdown document từ số first dplyr video tutorial của chúng tôi, đứng trước hướng dẫn được liên kết ở trên).

Tất cả dplyr chức năng trả về một địa phương khung dữ liệu theo mặc định, mặc dù bạn có thể chuyển đổi nó trở lại một khung dữ liệu thường xuyên sử dụng data.frame() chức năng. Một lý do để làm điều đó là nếu bạn thích cách mà thường xuyên dữ liệu khung in, cụ thể là bạn muốn xem thêm hàng hoặc cột nào. Tuy nhiên, dplyr cho phép bạn làm điều này mà không chuyển đổi:

library(dplyr) 
library(nycflights13) 

# print a local data frame (10 rows, variable number of columns) 
flights 

# print 15 rows 
print(flights, n = 15) 

# print all rows (don't run this, since it has 336,776 rows) 
print(flights, n = Inf) 

# print all columns 
print(flights, width = Inf) 

dplyr có vignette về khung dữ liệu cung cấp thêm chi tiết kỹ thuật.

+0

Tôi ban đầu trả lời rằng 'tbl_df()' và 'as_data_frame()' có hơi sử dụng khác nhau. @hadley làm rõ trên [Twitter] (https://twitter.com/justmarkham/status/702504719135186944) rằng chúng "về cơ bản giống nhau", vì vậy tôi đã cập nhật câu trả lời của mình. –

+0

Có một sự khác biệt giữa 'data.frame' và' tbl_df' thông thường ngoài các phương thức in. Trích dẫn từ các tài liệu: "[Không bao giờ đơn giản hóa (giọt), vì vậy luôn luôn trả về data.frame". Điều đó có nghĩa là trong khi 'dữ liệu (mtcars); mtcars [, 1] 'trả về một vector nguyên tử,' tbl_df (mtcars) [, 1] 'trả về một' địa phương 'dữ liệu.frame' với 1 cột. Sự khác biệt tinh tế này có thể gây ra hành vi bất ngờ nếu không được chăm sóc. Tôi khuyên bạn nên sử dụng '[[' để trích xuất các cột đơn khi sử dụng 'tbl_df's do đó (sẽ luôn trích xuất một vector đơn). –

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