R:What';调用library()时实际加载了什么?

R:What';调用library()时实际加载了什么?,r,R,下面是R脚本在数据“GasolineField”上进行beta回归的一个片段: 但是data.framegasolinefield不是在包betareg中吗?当我调用库(“betareg”)时,实际发生了什么?包中的所有数据不是都自动加载到当前环境中吗?有谁能帮助我理解这背后的机制吗?在大多数情况下,R包中包含的数据都是为了提供示例和其他非关键任务的内容。这就是为什么对于大多数软件包,数据集不会自动加载到环境中,您必须使用data()命令来加载它们。这是一件好事。对于那些主要提供函数以在用户不经

下面是R脚本在数据“GasolineField”上进行beta回归的一个片段:


但是data.frame
gasolinefield
不是在包
betareg
中吗?当我调用
库(“betareg”)
时,实际发生了什么?包中的所有数据不是都自动加载到当前环境中吗?有谁能帮助我理解这背后的机制吗?

在大多数情况下,R包中包含的数据都是为了提供示例和其他非关键任务的内容。这就是为什么对于大多数软件包,数据集不会自动加载到环境中,您必须使用
data()
命令来加载它们。这是一件好事。对于那些主要提供函数以在用户不经常使用数据时始终加载数据的包来说,这将浪费内存、时间和名称空间

加载包时,只有包设计器在“名称空间”文件中导出的内容才可用。“DESCRIPTION”文件有一个名为“LazyData”的字段,该字段也决定了数据的行为。顺便说一句,包中通常有供内部使用的函数,并且不会导出到名称空间文件中


TL;DR,包编写器确定加载包时可用的内容,并在命名空间和描述文件中指定这些项。

FWIW,这对我来说很好。有些包会自动将其数据变量名加载到当前环境中,而其他包则不会。这一切都取决于包装作者,以及他们在制作包装时选择放什么。数据和代码保存在单独的文件夹中,可以单独加载。
library("betareg")
data("GasolineYield", package = "betareg")
gy_logit <- betareg(yield ~ batch + temp, data = GasolineYield)
Error in terms.formula(form, ...) : object 'GasolineYield' not found