“摘抄:R for beginners”

合法的R函数总是带有圆括号的形式,即使括号内没有内容(如,ls())。 函数ls的功能是显示所有在内存中的对象:只会列出对象名 R语言中的赋值(\assign”) 符号一般是由一个尖括号与一个负号组成的箭头形标志:<- R中应该用分号来隔开同一行中的不同命令语句, 比如:name <- “Carmen”; n1 <- 10; n2 <- 100; m <- 0.5 如果只要显示出在名称中带有某个指定字符的对象,则通过设定选项pattern 来实现(可简写为pat) ):

ls(pat = "m")
[1] "m" "name"

运行函数ls.str()将会展示内存中所有对象的详细信息 要在内存中删除某个对象,可利用函数rm: 运行rm(x)将会删除对象x,运行rm(x,y) 将会删除对象x和y,而运行rm(list=ls())则会删除内存中的所有对象.

所有的对象都有两个内在属性:类型和长度。 类型是对象元素的基本种类,共有四种:数值型,字符型,复数型7和逻辑型(FALSE或TRUE),虽 长度是对象中元素的数目。对象的类型和长度可以分别通过函数mode和length得到。

x <- 1
mode(x)
[1] "numeric"
length(x)
[1] 1
A <- "Gomphotherium"; compar <- TRUE; z <- 1i
mode(A); mode(compar); mode(z)
[1] "character"
[1] "logical"
[1] "complex" 

R可以正确地表示无穷的数值,如用Inf和-Inf表示§1,或者用NaN(非数字)表示不是数字的值。

向量是一个变量,其意思也即人们通常认为的那样;因子是一个分类变量;数组是一个k维的数据表;矩阵是数组的一个特例,其维数k = 2。注意,数组或者矩阵中的所有元素都必须是同一种类型的;数据框是由一个或几个向量和(或)因子构成,它们必须是等长的,但可以是不同的数据类型;列表可以包含任何类型的对象,包括列表!

3.2 在文件中读写数据 函数read.table用来创建一个数据框,所以它是读取表格形式的数据的主要方法。举例来说,对于一个名为data.dat的文件,命令: mydata <- read.table("data.dat")

3.3 存储数据 函数write.table可以在文件中写入一个对象,一般是写一个数据框,也可以是其它类型的对象(向量,矩阵. . . )。参数和选项:write.table(x, file = "", append = FALSE, quote = TRUE, sep = " ",eol = "\n", na = "NA", dec = ".", row.names = TRUE, col.names = TRUE, qmethod = c("escape", "double")) 若想用更简单的方法将一个对象写入文件,可以使用命令write(x, file =”data.txt”),其中x是对象的名字(它可以是向量,矩阵,或者数组)。

创建对象 向量(Vector) 函数vector有两个参数:类型(mode)和长度(length),创建的向量中元素值取决于参数所指定的数据类型:数值型向量则元素值都为0,逻辑型都为FALSE,字符型都为”“。以下三个函数有几乎相同的效果(创建一个向量)并且只有一个参数即长度:numeric(),logical(),和character()。

矩阵(Matrix)一个矩阵实际上是有一个附加属性( 维数dim) 的向量,维数即为一个长度为2的向量, 用来指定矩阵的行数和列数。 一个矩阵可以用函数matrix来创建: matrix(data = NA, nrow = 1, ncol = 1, byrow = FALSE, dimnames = NULL)

选项byrow表示数据给出的值是要按列填充( 缺省值) 还是按行填充(如果为TRUE) 。 可以通过选项dimnames给行列命名。 row表示行,col表示列。

对象的类型转换

运算符

异或:如果a、b两个值不相同,则异或结果为1(true)。如果a、b两个值相同,异或结果为0(false)。

访问一个对象的数值:下标系统 下标系统可以用来有效、 灵活且有选择性地访问一个对象中的元素;记住下标必须使用方括号, 而圆括号是用来指定函数的参数的。下标可以是数值型的或逻辑型的。举例来说, 要访问向量x中的第3个值, 我们只要输入x[3]就可以获取或改变这个值

x <- 1:5
x[3]
[1] 3
x[3] <- 20
x
[1] 1 2 20 4 5

下标本身也可以是一个数值型向量:

i <- c(1, 3)
x[i]
[1] 1 20

如果x是一个矩阵或者数据框, 第i行第j列的值可以通过x[i,j]来访问。要访问一个给定的行或列中所有的值,只要忽略适当的下标( 不要忘记逗号!)

x <- matrix(1:6, 2, 3)
x
[,1] [,2] [,3]
[1,] 1 3 5
[2,] 2 4 6
x[, 3] <- 21:22
x
[,1] [,2] [,3]
[1,] 1 3 21
[2,] 2 4 22
x[, 3]
[1] 21 22

上面最后一个结果是一个向量而不是一个矩阵。R的缺省规则是返回一个维数尽可能低的对象。这可以通过修改选项drop的值来改变,它的缺省值是TRUE:

x[, 3, drop = FALSE]
[,1]
[1,] 21
[2,] 22

通过使用负数下标也可以用来不显示一个或一些行或列。 比如, x[-1,]将不显示第一行, x[-c(1:15), ]将不显示第1到第15行。 对于向量, 矩阵和数组, 可以用一个比较运算表达式作为下标来访问元素的值:

x <- 1:10
x[x >= 5] <- 20
x
[1] 1 2 3 4 20 20 20 20 20 20
x[x == 1] <- 25
x
[1] 25 2 3 4 20 20 20 20 20 20

下面是使用逻辑型下标的一种应用(选择一个整数变量中的偶数):

x <- rpois(40, lambda=5)
x
[1] 5 9 4 7 7 6 4 5 11 3 5 7 1 5 3 9 2 2 5 2
[21] 4 6 6 5 4 5 3 4 3 3 3 7 7 3 8 1 4 2 1 4
x[x %% 2 == 0]
[1] 4 6 4 2 2 2 4 6 6 4 4 8 4 2 4

在上面的例子中, 下标系统使用了比较运算符返回的逻辑值。 这些逻辑值可以被预先计算, 如果需要, 将循环使用:

x <- 1:40
s <- c(FALSE, TRUE)
x[s]
[1] 2 4 6 8 10 12 14 16 18 20 22 24 26 28 30 32 34 36 38 40

逻辑下标也可以在数据框中使用, 但是要注意数据框中不同的列可能有不同的数据类型。 对于列表, 访问不同的元素( 可以是任何类型的对象) 可以通过单一的或者双重的方括号来实现; 它们的区别是: 单个括号返回一个列表, 而双重括号将提取列表中的对象。 在得到的结果中也可以使用下标, 就像之前在向量、 矩阵等情况中看到的那样。 例如, 一个列表中的第3个对象是一个向量, 它的取值可以使用my.list[[3]][i]来访问, 如果是一个三维数组则使用my.list[[3]][i, j, k]等等; 另一个区别是my.list[1:2]将返回一个列表, 包含原始列表的第1个和第2个元素, 而my.list[[1:2]]不会给出期望的结果。 要从一个数据框中提取一个向量或者一个因子, 可以使用运算符$(例如DF$x), 这对列表同样有效。

访问对象的名称 names是一个对象元素的字符型标签, 它们一般情况下是可选的属性, 名称有多个种类(names, colnames, rownames, dimnames)。names是一个和对象有同样长度的向量并且可以通过函数names来访问。

x <- 1:3
names(x)
NULL
names(x) <- c("a", "b", "c")
x
a b c
1 2 3
names(x)
[1] "a" "b" "c"
names(x) <- NULL
x
[1] 1 2 3