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。
这完全取决于定义数据集的包是否使用惰性数据。如今,绝大多数包都使用惰性数据,因此utils::data()不需要调用。
\n\n需要注意的是,延迟加载的数据集不需要预先加载
\nutils::data(),事实上,it\xe2\x80\x99s 通常最好避免这样做。上面,一旦我们这样做了library(nycflights13),我们就可以立即访问航班。没有调用data(flights),因为没有必要。\n
data(some_pkg_data)支持仅在实际需要时使用的策略的调用有特定的缺点data(),即对于否则不可用的数据集:\n
\n- 默认情况下,
\ndata(some_pkg_data)会在 user\xe2\x80\x99s 全局工作区中创建一个或多个对象。有可能用新值默默地覆盖预先存在的对象。- 也不能保证
\ndata(foo)将创建一个名为 \xe2\x80\x9cfoo\xe2\x80\x9d 的对象。它可以创建多个对象和/或具有完全不同名称的对象。