R基础笔记

获取帮助

# 帮助文档
?solve
help(solve)

# 搜索文档
??"[["
help.search("[[")

# 在线文档
help.start()

# 运行文档中的例子
example(solve)

命令行

R  # 进入R环境
source("script.r") #执行R脚本
system("ls") #执行shell命令
q() # 退出R环境

输出展示和保存

( x<-1:10 ) # 加括号可以在赋值的同时也打印结果
dput(x) # 打印对象的纯文本表示

sink("log.txt") # 开始记录输出日志(同时展示输出)
sink() #保存日志

对象

类型查询

R 总共有 4 个类型查询函数,分别是:

有人整理了它们所有可能的返回值及其对应关系(参考链接):

spoken type class typeof mode storage.mode
logical vector logical logical logical logical
integer vector integer integer numeric integer
numeric vector numeric double numeric double
complex vector complex complex complex complex
character vector character character character character
raw vector raw raw raw raw
factor factor integer numeric integer
logical matrix matrix logical logical logical
logical matrix array logical logical logical
numeric matrix matrix double numeric double
numeric matrix array double numeric double
logical array array logical logical logical
numeric array array double numeric double
list list list list list
pairlist pairlist pairlist pairlist pairlist
data frame data.frame list list list
closure function function closure function function
builtin function function builtin function function
special function function special function function
environment environment environment environment environment
null NULL NULL NULL NULL
formula formula language call language
expression expression expression expression expression
call call language call language
name name symbol name symbol
paren in expression ( language ( language
brace in expression { language call language
S3 lm object lm list list list
S4 dummy object dummy S4 S4 S4
external pointer externalptr externalptr externalptr externalptr

类型判断

R 有一系列 is 开头的类型判断函数。

列表

alist<-list(a = 10, b = 20, c = 30)
# 判断对象是否属于列表
is.list(alist)
#返回第一元素子列(list)
alist[1]
alist["a"]

#返回第一元素的值(vector)
alist1
alist[["a"]]
alist$a

#返回若干元素子列
alist[1:2]
alist[c("a","c")]

#返回若干元素的值
unname(unlist(alist[c("a", "c")]))
unname(sapply(alist[c("a", "c")], identity))

难点:子列和数值不同

使用 unname(list[1]) 得到的结果和 list 1 完全一致?

不完全一样。

简要说明:list[1] 返回一个长度为 1 的子列表(仍是 list);list1 返回第 1 个元素本身(元素的类型可能是向量、data.frame、list 等)。unname() 去掉的是对象的 names 属性:对 list[1] 去名后仍是一个长度 1 的 list;对 list[[1]] 去名则是去掉该元素的名字(如果它有名字)。

# R
lst <list(a = 1:3, b = 4)

lst[1]
# -> list(a = 1:3)

unname(lst[1])
# -> list(1:3)      # 仍是一个 list(只是没有名字)

lst[[1]]
# -> 1 2 3          # 直接是数值向量

identical(unname(lst[1]), lst[[1]])
# -> FALSE

# 若要比较子列表中实际元素与提取元素是否相同:
identical(unname(lst[1])[[1]], lst[[1]])
# -> TRUE

# 若想得到没有名字的元素,使用 unname(lst[[1]])
unname(lst[[1]])

数据框

提取变量的三种方法

# 方法一:逐个提取
data$var1
data$var2
# 方法二:将所有变量加入命名空间
attach(data)
var1
var2
detach(data)
# 方法三:临时加入命名空间
with(data,plot(var1,var2))

subset()

模型

使用 names(model) 返回模型对象所有可用属性名称向量。

要访问某个指定属性,可以

名称 函数 含义
coefficients coef(), coefficients() 回归系数向量
residuals resid(), residuals() 残差向量
fitted.values fitted(), fitted.values() 拟合值向量

此外,可以

其他可用变量如下表所示:

名称 含义
effects 来自设计矩阵 QR 分解的正交化“效应”向量(内部计算用)
rank 设计矩阵的秩(矩阵列线性无关的个数)
assign 将系数向量的元素映射到模型项的整数向量
qr QR 分解的列表(包含 R 矩阵、pivot 等,用于求解系数)
df.residual 残差自由度(n - rank)
xlevels 因子变量在拟合时的水平列表(每个因子的水平)
call 拟合模型时的函数调用(match.call() 的结果)
terms terms 对象(表示模型公式和变量信息)
model 用于拟合的 model.frame(包含响应和自变量原始数据)

对象存取

#===纯文本格式===
dput(df,file="df.R")   #保存单个对象/返回原始格式
new.df<-dget("df.R")   #读取单个对象
dput(names(df))        #用例:返回df的变量名向量

dump(c("df1", "df2"), file = "data.R")  # 保存多个对象
source("data.R")                        # 读取多个对象

#===二进制格式===
save(df, file = "df.rda")         # 保存单个对象
save.image(file = "all.RData")    # 保存所有对象
load("df.rda")                    # 加载单个对象
load("all.RData")                 # 加载所有对象
# .rda和.RData 是完全相同的格式

环境管理

一切对象都存在于环境中。环境可看作对象名到对象映射的集合,每个环境都有一个父环境环环相扣,R 会沿着环境链条逐级查找对象。

搜索路径(Search Path)展示了部分环境链,包括:

search() #列出当前搜索路径

library(ggplot2) #将包环境加入搜索路径(不加参数则展示所有已安装的包)
detach("package:ggplot2") #从搜索路径移除包环境
renv::init() #直接访问包环境内的对象

attach(data) #将data环境加入搜索路径,变量即为对象
detach(data) #将data环境移出搜索路径
with(data, plot(x, y)) #直接访问数据框环境内的变量

ls() #列出`.GlobalEnv`中的对象
ls(3) #列出搜索空间第3位环境中的对象
rm(x) #删除`.GlobalEnv`中的对象x
rm(list = ls()) #删除`.GlobalEnv`中的所有对象