R与包相关的内容

 

 

objects()/ls()

两个函数用来检查当前工作环境的对象集合

 

查看对象结构

str()函数,输出指定对象的结构

如果向量元素超过10个,str()函数只会显示当前的10个元素

str(1:30)

 int [1:30] 1 2 3 4 5 6 7 8 9 10 ...

 

> z <- list(m=c(1:5), n=c("x", "y", "z"))

> z

$m

[1] 1 2 3 4 5

 

$n

[1] "x" "y" "z"

> str(z)

List of 2

 $ m: int [1:5] 1 2 3 4 5

 $ n: chr [1:3] "x" "y" "z"

 

ls.str()

z : List of 2

 $ m: int [1:5] 1 2 3 4 5

 $ n: chr [1:3] "x" "y" "z"

 

> ls.str(mode='list')

z : List of 2

 $ m: int [1:5] 1 2 3 4 5

 $ n: chr [1:3] "x" "y" "z"

 

ls.str 中还有一个参数 pattern  指定了匹配的名称模式。

pattern也可以是正则表达式

 

 

删除符号

可以使用rm  或者 remove 函数来从现有的环境中删除现有的符号

 

 

 

修改全局选项

R语言的选项能在全局范围内影响当前的会话

我们可以调用getOption()查看某一给定选项的值,使用options修改它的值

 

通过getOption来查看全局参数,通过options来修改全局变量

eg:

>getOption("digits")

[1] 7

>options(digits = 10)

> getOption("digits")

[1] 10

> options(digits = 7)

> getOption("digits")

[1] 7

 

修改警告级别

options(warn=0)

warn 有0,1,和2的设置

0  先输出结果,再输出warning

1  先输出warning, 再输出结果,针对结果输出很长时间的那种

2  直接将任何警告都视为错误

 

 

一般来说,除非必要,否则不建议修改全局选项

 

 

使用包中的函数

使用包中的函数有两种方式:

调用library加载包,继而可以直接使用该包的内的函数

使用package::function()只使用函数,而不是将整个包加载到环境中

 

eg:

一些统计量函数不是R的内置函数,不能直接调用,此时只能使用其他包中的函数来实现。

如计算偏度的函数moments中

library(moments)

skewness(x)

 

 

同样的也可以只调用函数,而不加载包,使用::

moments::skewness(x)

 

上述的两种方法的返回结果相同,但是工作机理不相同,对工作环境影响也不同。

具体说:

第一种方式使用library()修改了符号的搜索路径,第二种方式(::)没有修改

 

通过sessionInfo() 查看我们使用的包是非常有用的

>sessionInfo()

R version 3.5.1 (2018-07-02)

Platform: x86_64-apple-darwin15.6.0 (64-bit)

Running under: macOS  10.14.2

 

Matrix products: default

BLAS: /System/Library/Frameworks/Accelerate.framework/Versions/A/Frameworks/vecLib.framework/Versions/A/libBLAS.dylib

LAPACK: /Library/Frameworks/R.framework/Versions/3.5/Resources/lib/libRlapack.dylib

 

locale:

[1] C

 

attached base packages:

[1] stats     graphics grDevices utils     datasets  methods 

[7] base    

 

loaded via a namespace (and not attached):

[1] compiler_3.5.1 tools_3.5.1    yaml_2.2.0  

 

上述信息中显示了R的版本,并列出了已下载并被加载的扩展包。

 

require() 类似于library()数,都能加载扩展包,但是require会返回一个逻辑值来判断是否加载成功

> load <- require(moments)

Loading required package: moments

> load

[1] TRUE

 

if(! require(moments)){

       install.package(moments)

       library(moments)

}

判断有没有moments这个包。如果没有,就安装,并且加载

require有一个小缺点

如果要加载的包没有安装或根本不存在,require只返回一个警告,而不想library那样会产生错误。

但是library会立即停止脚本的运行

如果程序要失败,就最好让失败早点出现。

 

 

 

 

屏蔽和同名冲突

新建一个R会话会自动加载基本包,基本包涉及到一些基础、统计、图形的用法等。这些包会被自动加载,并且每一个包都有一系列的特定用途的函数。

因此有可能出现两个包中的函数相互冲突的情况

如果连个函数名冲突,就会产生屏蔽机制masking。

 

如果必须使用有同名函数的两个包,最好都不要加载,而是从包中分别提取函数

fun1 <- package1::funName

fun2 <- package2::funName

 

如果恰好装入了一个包,想要接触绑定,可以使用unloadNamespace()以moments为例:

>unloadNamespace("moments")

> skewness(c(1,2,3,4,5))

Error in skewness(c(1, 2, 3, 4, 5)) : could not find function "skewness"

>

一旦解除绑定,则包内函数就不能直接调用了

但是使用moments::skewness是可以可调用的

> moments::skewness(c(1,2,3,4,5))

[1] 0

 

 

检查是否已安装扩展包

> pkgs <-installed.packages()

colnames(pkgs)

 [1] "Package"              "LibPath"              

 [3] "Version"              "Priority"             

 [5] "Depends"              "Imports"              

 [7] "LinkingTo"            "Suggests"             

 [9] "Enhances"              "License"              

[11] "License_is_FOSS"       "License_restricts_use"

[13] "OS_type"               "MD5sum"               

[15] "NeedsCompilation"      "Built"    

 

当需要检查扩展包是否已经安装的时候,就可以借助一下代码

c("moments") %in% installed.packages()[, "Package"]

[1] TRUE

 

查看包的版本

installed.packages()["moments", "Version"]

[1] "0.14"

>packageVersion("moments")

[1] '0.14'

 

 

 

 


版权声明:本文为guduchangjian原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。