“这是什么意思?”;“本地数据帧”;来自“dplyr:::print.tbl_df”的消息?

“这是什么意思?”;“本地数据帧”;来自“dplyr:::print.tbl_df”的消息?,r,printing,dplyr,R,Printing,Dplyr,使用dplyr时,tbl_df函数打印一条语句,说明数据帧是“本地”的: 我认为本地数据帧是指内存,而非本地数据帧是类似SQL的数据库。不过,我认为我的假设是错误的。在这篇大约25:25的文章中,Kevin Markham说,data.frame对象不是本地数据帧,我认为它们是本地数据帧 我查阅了tbl_df文档,并在中使用了搜索功能,但找不到本地数据帧的描述 问题:什么是本地数据帧? 数据帧tbl包装本地数据帧。与常规数据帧相比,使用tbl_df的主要优点是打印:tbl对象只打印适合一个屏幕的

使用dplyr时,
tbl_df
函数打印一条语句,说明数据帧是“本地”的:

我认为本地数据帧是指内存,而非本地数据帧是类似SQL的数据库。不过,我认为我的假设是错误的。在这篇大约25:25的文章中,Kevin Markham说,
data.frame
对象不是本地数据帧,我认为它们是本地数据帧

我查阅了
tbl_df
文档,并在中使用了搜索功能,但找不到本地数据帧的描述

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

数据帧tbl包装本地数据帧。与常规数据帧相比,使用tbl_df的主要优点是打印:tbl对象只打印适合一个屏幕的几行和所有列,提供了将其余部分描述为文本的功能

地区 请注意,对于本地数据帧,排序是用C++代码来完成的,它不能访问R中通常执行的本地特定排序。这意味着字符串排序好像C语言环境

< p>我是问题中的作者。以下是与本次讨论相关的功能摘要:

  • data.frame()
    是R的函数,用于创建常规的数据帧
  • data\u frame()
    是dplyr用于创建local数据帧的函数
  • tbl_df()
    as_data_frame()
    是dplyr将常规数据帧(或列表)转换为本地数据帧的函数
那么,常规本地数据帧之间的区别是什么?很少。本地数据帧只是一个常规数据帧,它已用
tbl_df
类包装,以便更好地打印。(数据仍存储在“发动机罩下”的常规数据框中。)

具体地说,打印一个本地数据框只显示前10行,并在屏幕上显示尽可能多的列。(您可以在“我的”的顶部看到此行为的示例,它位于上面链接的教程之前)

默认情况下,所有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有一个关于数据帧的功能,提供了更多的技术细节。

它只是将它与远程数据源(如MySQL数据库或其他什么)区分开来。如果链接的视频是准确的,
data\u frame
对象是本地数据帧,但
data.frame
对象不是。现在我也很困惑。我不认为@Tyler在最初的假设中是错误的,而且有一些语义在起作用。也许,与docs和Kevin Markham的说法一致,可以说“本地数据帧”是由tbl_df包装的数据,tbl_df是从data.frame创建的,在包装之前它本身不是“本地数据帧”?挖掘源代码后的一些见解:
print.tbl_df
总是打印
cat(“source:local data frame,…)
,所以在这个意义上,任何数据帧都是局部的();本地数据帧是远程数据源()的“反面”。@smci打开它会很好,但我不打算实现它,因为我认为当前的行为对大多数人更有用。我最初的回答是,
tbl\u df()
as\u data\u frame()
的用途略有不同@hadley澄清说它们“基本相同”,所以我更新了我的答案。除了打印方法之外,常规的
data.frame
s和
tbl_df
s之间还有另一个区别。引用文档:“[从不简化(删除),所以总是返回data.frame”。这意味着当
数据(mtcars);mtcars[,1]
返回一个原子向量时,
tbl_df(mtcars)[,1]
返回一个(本地)
data.frame
有一列。如果不注意,这种细微的差异可能会导致意外行为。因此,我建议在使用
tbl_df
s时使用
[
提取单个列(它将始终提取单个向量)。
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)