目录
- 1. 查找帮助
- 2. 查看工作空间
- 3. 拓展包
- 4. 储存数据
- 4.1 查看R包数据集
- 4.2 导出R包数据集
- 5. 读取数据
- 6. 创建数据
- 6.1 向量vector
- 6.2 因子factor
- 6.3 矩阵matrix
- 6.4 数据框Data frame
- 6.5 列表list
- 6.6 时间序列Time-series
- 7. 提取数据
- 8. 数据运算
- 8.1 运算符
- 8.2 简单运算
- 8.3 复杂运算
- 8.4 矩阵计算
- 9. 变量类型
- End
1. 查找帮助
help(topic) # 关于topic的文档,等同于 ?topic、help("lm")
help.start() # 打开HTML浏览器来看帮助文件
help.search("foo") # 列出所有在帮助页面含有 foo 的函数
help("bs", try.all.packages = TRUE) # 默认状态下,函数help只会在被载入内存中的包中搜索,try.all.package为TRUE,可在所有包中进行搜索
2. 查看工作空间
getwd() # 查看当前的工作目录
setwd() # 设定当前的工作目录
ls() # 列出当前工作空间中的对象
ls.str() # 展示内存中所有对象的详细信息
rm(x) # 删除工作空间中对象x
rm(x,y) # 删除对象x和y
rm(list=ls()) # 删除工作空间中的所有对象
savehistory("myfile") # 保存命令历史到文件myfile中
save.image("myfile") # 保存工作空间到文件myfile中
save.image()是save(list =ls(all=TRUE),file=".RData")的一个简捷方式。
q() # 退出R
3. 拓展包
library(help=x) # 显示 x 包的函数和数据集
install.packages("foreign") # 安装包 要加双引号
installed.packages() # 输出已安装的拓展包
old.packages() # 检查需要更新的拓展包
update.packages() # 升级所有拓展包
remove.packages("dplyr") # 卸载安装包
attach(x) # 指向R的搜索路径,绑定数据集
detach(x) # 解除绑定
library(x)和require(x)的区别 library(x) 和 require(x) 都可以加载包。
两者区别:在一个函数中,如果一个包不存在,执行到library时将会停止执行,并报错,而require则会继续执行。
require将会根据包的存在与否返回true或者false,因此写R程序的常用技巧为:
if(!require("cluster")) install.packages("cluster")
library(cluster)
而另外有人认为require是try to load the R package,因此失败返回false,成功返回true。library是just load the R package。用require时,若报错,则不好判断是代码错误还是载入R package时的错误(代码比较多的时候),因此不建议用require。
4. 储存数据
函数write.table可以在文件中写入一个对象,一般是写一个数据框,也可以是其它类型的对象(向量,矩阵...)
write.table(x, # 要写入的对象的名称
file = "", # 文件名
append = FALSE, # 如果为TRUE则在写入数据时不删除目标文件中可能已存在的数据,采取往后添加的方式
quote = TRUE,
sep = " ", # 文件中的字段分隔符
eol = "n", # 使用在每行最后的字符("nn"表示回车)
na = "NA", # 表示缺失数据的字符
dec = ".", # 用来表示小数点的字符
row.names = TRUE, # 一个逻辑值,决定行名是否写入文件
col.names = TRUE, # 一个逻辑值(决定列名是否写入文件)
qmethod = c("escape", "double"),
fileEncoding = "")
4.1 查看R包数据集
data() # 列出当前已加载包中所含的所有可用数据集
print(data(package="survival")) # 查看survival包中的内置数据集
??survival # 对于特定数据集,可通过命令进一步了解数据信息
4.2 导出R包数据集
library(survival) # 加载包
data(lung) # 加载 lung 数据集到环境中
write.csv(lung, "lung.csv") # 将内置数据集导出 或
write.table(x = lung, file = "lung.csv") # 将内置数据集 lung 导出
5. 读取数据
read.table(file, # 文件名
header = FALSE, # 第一行是否包含变量名称
sep = "", # 文件中的字段分离符
quote = ""'", # 指定用于包围字符型数据的字符
dec = ".", # 用来表示小数点的字符
numerals = c("allow.loss", "warn.loss", "no.loss"),
row.names, col.names, # 保存着行名的向量 指定列名的字符型向量
as.is = !stringsAsFactors, # 控制是否将字符型变量转化为因子型变量
na.strings = "NA", # 代表缺失数据的值(转化为NA)
colClasses = NA, # 指定各列的数据类型的一个字符型向量
nrows = -1, # 可以读取的最大行数
skip = 0, # 读取数据前跳过的行数
check.names = TRUE, # 如果为TRUE,则检查变量名是否在R中有效
fill = !blank.lines.skip, # 如果为TRUE且非所有的行中变量数目相同,则用空白填补
strip.white = FALSE, # 在sep已指定的情况下,如果为TRUE,则删除字符型变量前后多余的空格
blank.lines.skip = TRUE, # 如果为TRUE,忽略空白行
comment.char = "#") # 一个字符用来在数据文件中写注释,以这个字符开头的行将被忽略
NA # 表示缺失值(不可用)
NaN # 表示不是数字的值(非数字)
Inf、-Inf # 表示无穷的数值
6. 创建数据
6.1 向量vector
函数vector有两个参数:类型(mode)和长度(length),创建的向量中元素值取决于参数所指定的数据类型。
向量是一个变量。
rnorm(n, mean=0, sd=1) # 随机序列
seq(from = 1, to = 10, by = 2) # 产生序列,从1到10,序列等间隔为2。默认间隔为 1。
seq(from = 1, to = 10, length = 4) # 产生序列,从1到10,序列长度为 4。
seq(along = x) # 产生该向量的下标序列
seq(from = 1, to = 10, length.out= 5) # 产生序列,从1到10,长度为 5,序列等间隔。
seq(along.with= ) # along.with 表示生成的向量为现有一向量元素的索引
seq(from) # 与上面相似
seq(length.out= 5) # 生成从1开始,步长为1,长度为 5 的向量
rep(x,times = 3) # 将 x 重复3次
sequence(4:5) # 创建一系列连续的整数序列 1 2 3 4 1 2 3 4 5
sequence(c(10,5)) # 1 2 3 4 5 6 7 8 9 10 1 2 3 4 5
gl(k,n,length,label=c("", "")) # k是水平数(或类别数),n是每个水平重复的次数
# length用来指定产生数据的个数,labels用来指定每个水平因子的名字。
6.2 因子factor
因子是一个分类变量
factor(x,
levels = sort(unique(x), # 因子可能的水平
na.last = TRUE),
labels = levels, # 指定水平的名字
exclude = NA, # 从向量x中剔除的水平值
ordered = is.ordered(x)) # 一个逻辑型选项用来指定因子的水平是否有次序
levels(ff) # 用来提取一个因子中可能的水平值
6.3 矩阵matrix
矩阵是数组的一个特例,其维数k = 2。数组或者矩阵中的所有元素都必须是同一种类型的;
matrix(data = NA, # 向量
nrow = 1, # 指定矩阵的行数和列数
ncol = 1,
byrow = FALSE, # 按列填充
dimnames = NULL) # 给行列命名
6.4 数据框Data frame
数据框是由一个或几个向量和(或)因子构成,它们必须是等长的,但可以是不同的数据类型
read.table() # 读取数据
data.frame() # 数据框中的向量必须有相同的长度,如果其中有一个比其它的短,它将“循环”整数次(以使得其长度与其它向量相同)
data.frame(A1=x, A2=n) # 命名列名
# row.names给行命名,命名向量必须是字符型的而且长度等于这个数据框的行数
6.5 列表list
# 包含的对象没有什么限制
x <- 1:4;
y <- 2:4;
L1 <- list(x, y);L1
L2 <- list(A=x, B=y);L2
6.6 时间序列Time-series
函数ts可以由向量(一元时间序列)或者矩阵(多元时间序列)创建一个ts型对象,并且有一些表明序列特征的选项(带有缺省值)
ts(data = NA, # 一个向量或者矩阵
start = 1, # 第一个观察值的时间,为一个数字或者是一个由两个整数构成的向量(参见下面的例子)
end = numeric(0), # 最后一个观察值的时间,指定方法和start相同
frequency = 1, # 单位时间内观察值的频数(频率)
deltat = 1, # 两个观察值间的时间间隔, frequency和deltat必须并且只能给定其中之一
ts.eps = getOption("ts.eps"), # 序列之间的误差限。
class, # 对象的类型
names) # 一个字符型向量,给出多元序列中每个一元序列的名称
7. 提取数据
用来有效、灵活且有选择性地访问一个对象中的元素
x[3] # 向量
x[i,j,drop = FALSE] # 矩阵或者数据框
x[i, j, k], x[, , 3], x[, , 3, drop = FALSE] # 数组
x[-1,] # 将不显示第一行
x[-c(1,15), ] # 将不显示第1到第15行
# 向量,矩阵和数组,比较运算表达式作为下标来访问元素的值
x <- 1:10; x[x >= 5] <- 20
8. 数据运算
8.1 运算符
0 < x < 1
# 这种类型的不等式必须使用逻辑词 “与”,这个不等式,将被改写成
0 <x & x < 1
函数:identical 和 all.equal
比较运算符作用在两个被比较对象的每个元素上,返回一个同样大小的对象。
identical 比较数据的内在关系,如果对象是严格相同的返回TRUE,否则返回FALSE。
all.equal 用来判断两个对象是否“近似相等”,返回结果为TRUE或者对二者差异的描述。
8.2 简单运算
8.3 复杂运算
8.4 矩阵计算
# R中有矩阵计算和处理的工具,函数rbind()和cbind()分别用上下或左右的方式合并向量或矩阵
rbind(m1, m2)
cbind(m1, m2)
# 两矩阵乘积的运算符是“%*%”
rbind(m1, m2) %*% cbind(m1, m2)
cbind(m1, m2) %*% rbind(m1, m2)
# 矩阵的转置由函数t完成
# 函数diag可以用来提取或修正一个矩阵的对角元,或者创建一个对角矩阵。
diag(m1)
diag(rbind(m1, m2) %*% cbind(m1, m2))
9. 变量类型
mode(x) # 查看对象的类型
methods(as) # 得到所有转换列表
as.data.frame(x) # 转换为数据框
as.numeric(x) # 转换为数值
as.logical(x) # 转换为逻辑值
as.character(x) # 转换为字符型变量
factor(x,levels=) # 把向量 x 编码为因子
methods(is) # 得到所有检验列表
is.na(x) # 查看是不是缺失值
is.data.frame(x) # 查看是不是数据框
is.numeric(x) # 查看是不是数值
is.character(x) # 查看是不是字符型
# 将一个数值型因子转换为一个数值型向量并且保持最初指定的水平值,就必须先转换成字符型然后再转换成数值型。
fac <- factor(c(1, 10))
as.numeric(as.character(fac))