一、基本原理
R是一种解释型语言,输入的命令可以直接被执行,不同于C等编译语言需要构成完整的程序才能运行。
R的语法非常简单和直观。合法的R函数总是带有圆括号的形式,即使括号内没有内容(如,ls())。所有函数后都接有圆括号以区别于对象(object)。
所有能使用的R函数都被包含在一个库(library) 中,该库存放在磁盘的R HOME/library目录下(R HOME是最初安装R的地址)。这个目录下含有具有各种功能的包(packages),各个包也是按照目录的方式组织起来的。其中名为base的包可以算是R的核心,因为它内嵌了R语言中所有像数据读写与操作这些最基本的函数。在上述目录中的每个包内,都有一个子目录R,这个目录里又都含有一个与此包同名的文件(例如在包base中,有这样一个文件R HOME/library/base/R/base)。该文件正是存放所有函数的地方。
R语言中最简单的命令就是通过一个对象来显示其内容。如,一个名为name的对象,其内容为‘content’
name
name
## [1] "content"
或使用函数输出对象的内容
print(name)
## [1] "content"
注:对象的名字必须是以一个字母开头(A–Z 或a–z), 中间可以包含字母,数字(0–9),点(.)及下划线( ).因为R对对象的名字区分大小写,所以x 和X就可以代表两个完全不同的对象(在Windows操作系统中也是如此)。
二、对象的产生、排列及删除
一个对象可以通过赋值操作来产生,R语言中的赋值(“assign”) 符号一般是由一个尖括号与一个负号组成的箭头形标志。该符号可以是从左到右的方向,也可以相反:
n
n
## [1] "hello, world"
n -> 'hello, world'
n
## [1] "hello, world"
如果该对象已经存在,那么它以前的值将会自动被新值冲掉(这种修改只会影响内存中的数据,操作结果暂时不会被保存到硬盘中)。
n
n
## [1] "Goodbye"
函数ls的功能是显示所有在内存中的对象:只会列出对象名。注意在R中应该用分号来隔开同一行中的不同命令语句。
name
ls()
## [1] "hello, world" "m" "n" "name"
如果只要显示出在名称中带有某个指定字符的对象,则通过设定选项pattern 来实现(可简写为pat).
ls(pat = 'n')
## [1] "n" "name"
ls(pattern = 'm')
## [1] "m" "name"
如果进一步限制显示为在名称中以某个字母开头的对象
ls(pattern = '^m')
## [1] "m"
运行ls.str()将会显示内存中所有对象的详细信息ls.str 将会列出关于对象的所有信息,包括数据框,矩阵,数据列表的列数信息。
ls.str()
## hello, world : chr "hello, world"
## m : chr "monkey"
## n : chr "noodles"
## name : chr "content"
f
ls.str(pattern = 'f')
## f : 'data.frame': 1 obs. of 3 variables:
## $ n : Factor w/ 1 level "noodles": 1
## $ m : Factor w/ 1 level "monkey": 1
## $ name: Factor w/ 1 level "content": 1
设定max.level可改变对象的显示内容。
print(ls.str(pattern = 'f'), max.level = -1)
## f : 'data.frame': 1 obs. of 3 variables:
print('###')
## [1] "###"
print(ls.str(pattern = 'f'), max.level = 1)
## f : 'data.frame': 1 obs. of 3 variables:
## $ n : Factor w/ 1 level "noodles": 1
## $ m : Factor w/ 1 level "monkey": 1
## $ name: Factor w/ 1 level "content": 1
要在内存中删除某个对象,可利用函数rm:运行rm(x)将会删除对象x,运行rm(x,y)将会删除对象x和y,而运行rm(list=ls())则会删除内存中的所有对象.
ls()
## [1] "f" "hello, world" "m" "n" "name"
rm(f)
ls()
## [1] "hello, world" "m" "n" "name"
rm(n, m)
ls()
## [1] "hello, world" "name"
rm(list = ls(pattern = '^h'))
ls()
## [1] "name"
三、在线帮助
R中给予的在线帮助能提供关于如何使用函数的非常有用的信息。
?print #查看特定函数的帮助.
## starting httpd help server ... done
help(print)
help('print')
对初学者而言,参考帮助中Examples部分的信息是很有用的。而一般应该仔细阅读Arguments中的一些说明也是非常有必要的。帮助中还包含了其它一些说明部分,如Note, References或Author(s)等。
查询关于某特殊语法意义字符的帮助。
# help(*)
help("*")
默认状态下,函数help只会在被载入内存中的包中搜索。选项try.all.package在缺省值是FALSE,但如果把它设为TRUE,则可在所有包中进行搜索。
help('bs')
## No documentation for 'bs' in specified packages and libraries:
## you could try '??bs'
help('bs', try.all.packages = TRUE)
但注意在这种情况下,不会显示关于函数bs的帮助页面,如果使用者确实想打开这样的页面而所属包又没有被载入内存时,可以使用package这个选项.
help('bs', package = 'splines')
Html格式的帮助可以通过输入下面的函数启动.在html格式的帮助页面中还可以使用关键词进行搜索.
help.start()
## If nothing happens, you should open
## 'http://127.0.0.1:31375/doc/html/index.html' yourself
使用函数apropos则能找出所有在名字中含有指定字符串的函数,但只会在被载入内存中的包中进行搜索
apropos("help")
## [1] "help" "help.request" "help.search" "help.start"