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'