为什么我们需要加载数据集(或任何其他)包中的数据?

clo*_*tes 3 r lazy-evaluation promise

看来我什至没有使用加载 mtcars

data(mtcars)
Run Code Online (Sandbox Code Playgroud)

我可以处理该数据帧,并且我看到它不是在全局环境中,而是在其包环境中作为承诺。

# can run without loading with data(mtcars)
View(mtcars)
ncol(mtcars)
Run Code Online (Sandbox Code Playgroud)

我读了某人的代码发现他们使用 data() 来加载它。但为什么我们需要将其加载到内存中呢?如果不通过 data() 显式加载它,我们不能做什么?

因为数据集位于 search() 路径中,这意味着在词法作用域中您也可以访问 Promise。

Kon*_*lph 5

这完全取决于定义数据集的包是否使用惰性数据。如今,绝大多数包都使用惰性数据,因此utils::data()不需要调用。

\n

引用R 包中的第 8 章

\n
\n

需要注意的是,延迟加载的数据集不需要预先加载utils::data(),事实上,it\xe2\x80\x99s 通常最好避免这样做。上面,一旦我们这样做了library(nycflights13),我们就可以立即访问航班。没有调用data(flights),因为没有必要。

\n

data(some_pkg_data)支持仅在实际需要时使用的策略的调用有特定的缺点data(),即对于否则不可用的数据集:

\n
    \n
  • 默认情况下,data(some_pkg_data)会在 user\xe2\x80\x99s 全局工作区中创建一个或多个对象。有可能用新值默默地覆盖预先存在的对象。
  • \n
  • 也不能保证data(foo)将创建一个名为 \xe2\x80\x9cfoo\xe2\x80\x9d 的对象。它可以创建多个对象和/或具有完全不同名称的对象。
  • \n
\n
\n