“local data frame”消息是从`dplyr:::print.tbl_df`函数输出的一种数据类型,表示数据框(data frame)在本地环境中存储。

24
使用dplyr时,tbl_df函数会打印一条声明,表明数据框是“本地”的:
> mtcars %>%
+     group_by(gear) 
Source: local data frame [32 x 11]
Groups: gear

    mpg cyl  ...
1  21.0   6  ...

我曾认为本地数据框指的是内存中的数据框,而非本地数据框则是像SQL这样的数据库。但我认为我的假设是错误的。在约25:25的教程视频中,Kevin Markham说data.frame对象不是本地数据框,而我原以为它们是。

我查看了tbl_df文档,并在dplyr简介文档中使用搜索功能,但找不到本地数据框的描述。

问题:什么是本地数据框?


6
只是要将其与远程数据源(如MySQL数据库或其他类似的东西)区分开来。 - joran
3
如果链接视频准确的话,data_frame对象是本地数据框,但data.frame对象则不是。现在我也感到困惑了。 - stuwest
2
我认为@Tyler在最初的假设中并没有错,而且有一些语义在起作用。也许,与文档和Kevin Markham的陈述一致,可以说“本地数据框”是由data.frame创建的tbl_df包装的数据,直到被包装之前它本身不是一个“本地数据框”? - jaimedash
1
挖掘源代码后的一些见解:print.tbl_df总是打印cat("Source: local data frame", ...),因此在这个意义上,任何数据框都是“本地的”(链接1);“本地数据框”是“远程数据源”的“相反”(链接2)。 - tonytonov
1
@hadley,提出一个增强请求以删除它或仅在verbose==TRUE时打印,这样可以吗?我也不喜欢默认情况下自动打印维度。通常我只想看到感兴趣的数据。 - smci
2
@smci 可以打开它,但我不会实现它,因为我认为当前的行为对大多数人来说更有用。 - hadley
2个回答

9

我是问题中提到的视频教程的作者。以下是与本讨论相关的函数摘要:

  • data.frame() 是 R 的用于创建常规数据帧的函数。
  • data_frame() 是 dplyr 用于创建本地数据帧的函数。
  • tbl_df()as_data_frame() 是 dplyr 用于将常规数据帧(或列表)转换为本地数据帧的函数。

那么,常规本地数据框之间有什么区别?很小。一个本地数据框只是一个已用 tbl_df 类封装过以实现更好打印效果的常规数据框。(数据仍存储在常规数据框“under the hood”中。)

具体来说,仅打印本地数据框只显示前10行和尽可能多的列以适应屏幕大小。 (您可以在我的RMarkdown文档顶部看到此行为的示例,该文档位于我dplyr视频教程之前的教程之前)。
所有dplyr函数默认返回一个本地数据框,但您可以使用data.frame()函数将其转换回常规数据框。这样做的原因之一是,如果您喜欢常规数据框的打印方式,即希望看到更多行或更多列,则可以这样做。但是,dplyr允许您在不进行转换的情况下执行此操作:
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有一个关于数据框的vignette,提供更多技术细节。


我最初回答说 tbl_df()as_data_frame() 有稍微不同的用途。@hadley 在 Twitter 上澄清说它们 "基本上是相同的",所以我更新了我的答案。 - Kevin Markham
除了打印方法之外,常规的data.frametbl_df之间还有另一个区别。引用文档中的话:“[不会简化(删除)数据,因此始终返回data.frame]”。这意味着,虽然data(mtcars); mtcars[, 1]返回一个原子向量,但是tbl_df(mtcars)[,1]返回一个具有1列的(本地)data.frame。如果不加注意,这种微妙的差异可能会导致意外的行为。因此,我建议在使用tbl_df时使用[[来提取单个列(它将始终提取单个向量)。 - talat

1

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

一个数据框 tbl 包装了一个本地数据框。使用 tbl_df 而不是普通数据框的主要优点是打印:tbl 对象仅打印几行和适合一个屏幕的所有列,提供描述其余部分的文本。

来自

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

本地化 请注意,对于本地数据框,排序是在 C++ 代码中完成的,该代码无法访问通常在 R 中执行的本地特定排序。这意味着字符串的排序方式类似于 C 语言环境。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接