d8a*_*nja 22 r object install.packages
可能是一个非常基本的问题,但朋友和我试图跑str(packge_name),R给我们一个错误.现在我正在看它,我想知道R包是否像.zip文件一样,它是一个对象集合,比如图片和歌曲,但不是图片或歌曲本身.
如果我试图用图像浏览器打开一个图片拉链,它就不会知道该做什么,直到我解压缩它 - 就像我不能打电话str(forecast)但我可以str(ts)在我将预测包加载到我的库中后调用. ..
谁能让我直截了当?
42-*_*42- 22
R包通常作为压缩的文件包分发.它们可以是"二进制"形式,在存储库中预处理以编译任何C或Fortran源并创建正确的头,或者它们可以是源代码形式,其中各种所需文件可用于安装过程,但这要求用户在使用OS系统资源的R构建过程可以获得的位置安装必要的编译器和工具.
如果您在CRAN上阅读包的文档,您会看到它们以一组压缩格式分发,这些格式因操作系统目标而异:
Package source: Rcpp_0.11.3.tar.gz # the Linus/UNIX targets
Windows binaries: r-devel: Rcpp_0.11.3.zip, r-release: Rcpp_0.11.3.zip, r-oldrel: Rcpp_0.11.3.zip
OS X Snow Leopard binaries: r-release: Rcpp_0.11.3.tgz, r-oldrel: Rcpp_0.11.3.tgz
OS X Mavericks binaries: r-release: Rcpp_0.11.3.tgz
Old sources: Rcpp archive # not really a file but a web link
Run Code Online (Sandbox Code Playgroud)
安装后,R包将具有指定的目录结构.DESCRIPTION文件是一个文本文件,其中包含用于确定本地安装是否满足程序包依赖性的组件的特定条目.有NAMESPACE,LICENSE和INDEX文件.有些目录名为'/ help','/ html','/ Meta','/ R',可能还有'/ libs','/ demo','/ data','/ unitTests'等.
这是../library/Rcpp包目录顶部的树:
$ ls
CITATION NAMESPACE THANKS examples libs
DESCRIPTION NEWS.Rd announce help prompt
INDEX R discovery html skeleton
Meta README doc include unitTests
Run Code Online (Sandbox Code Playgroud)
因此,在包的"生命周期"中,最初会有一系列必需和可选文件,然后由BUILD和CHECK机制处理到已安装的包中,然后压缩以进行分发,然后解压缩到用户计算机上的指定目录树中.请参阅以下帮助页面:
?.libPaths # also describes .Library()
?package.skeleton
?install.packages
?INSTALL
Run Code Online (Sandbox Code Playgroud)
当然还可以阅读Writing R Extensions,这是R的每个安装都附带的文档.
Kon*_*lph 19
你的问题是:
什么类型的对象是R包?
不知何故,我仍然错过了这个确切问题的答案.所以这里:
就R而言,R包不是对象.也就是说,它不是R类型系统中的对象.R有点困难,因为它允许你写
library(pkg_name)
Run Code Online (Sandbox Code Playgroud)
无需pkg_name先前在任何地方定义.相比之下,您在R中使用的其他对象必须在某处定义 - 或者由您自己定义,或者由显式或隐式加载的某个包定义.
这是不幸的,让人困惑.因此,当你看到library(pkg_name),想想
library('pkg_name')
Run Code Online (Sandbox Code Playgroud)
也就是说,用引号来设想包名.事实上,这确实与预期一样有效.代码也可以在没有引号的情况下工作这一事实是library函数的特性,称为非标准评估.在这种情况下,这主要是一个不幸的设计决定(但有原因).
所以,重复一下答案:包不是一种R对象1.对于R,它只是一个名称,它指的是文件系统中的已知位置,类似于您的假设.BondedDust的答案详细解释了这个结构,所以我在此不再重复.
1有关超级技术细节,请参阅下面的Joshua和Richard的评论.