R语言基础

本文详细介绍了R语言的基础操作,包括变量赋值、数据类型、控制流、向量、矩阵、数据框和列表的使用。还涵盖了函数、历史记录、快捷键以及文件操作。此外,讲解了如何进行数值积分、逻辑运算、缺失值处理和数据排序。同时,提到了R中的模型构建和公式表示,以及如何进行文件连接和表达式操作。
摘要由CSDN通过智能技术生成

R是动态语言,变量可以赋值给它不同的数据类型。
ctrl+上箭头 列出历史记录
Esc 中断当前命令的执行
alt+shift+k 显示所有快捷操作
getwd()显示当前工作目录
setwd()修改默认的工作目录 例子:setwd(dir=“c:/Users/wangtong/Desktop/RData/”)
文件路径用正斜线/连接 反斜线需要转义
R语言中常量、变量、函数、图形都被称为对象,对象都可以用自定义的字母表示,所以使用函数一定要加()
list.files()或dir()查看目录下的文件
对x赋值:x<-3 不推荐用=赋值
x<<-3 强制赋值给一个全局变量
ls()列出变量
ls.str()列出所有变量的具体内容
str(x):列出变量x的信息
隐藏变量也查看:print(ls(all.names = TRUE))
删除变量:rm(var_name)
删除工作空间所有对象:rm(list=ls())
history(25):列出最近的25条历史记录
ctrl+L清空屏幕
save.image(“myfile”)保存工作空间到myfile文件中(默认后缀.RData)
save(object,file=“myfile”)保存指定对象到一个文件中
load(“myfile”)读取一个工作空间到当前会话中
q() 退出软件

导包:

install.packages(“vcd”)
.libPaths() 显示库所在的位置
library() 显示库里有哪些安装包
library(vcd)载入需要的包
help(package=“vcd”)显示包的帮助文档
ls(“package:vcd”)列出包下包含的所有函数
detach(“package:vcd”) 移除加载的包
删除已安装的包:remove.package(“vcd”)
installed.packages() 显示已安装的包
Rpack<-installed.packages()[ ,1] 使用下标访问数据框的第一列
save(Rpack,file=“Rpack.Rdata”) 将所有R包的名字保存到文件中
批量安装R包 for(i in Rpack) install.packages(i)

example()查看函数使用案例
example(mean)查看普通函数,给出实例
example(“hist”)绘图函数,给出绘图案例

向量:

1+1*3 输出4
c(0,1,1,2,3,9) 输出0 1 1 2 3 9
c(“hello world”,“I am a R user”) 输出"hello world" “I am a R user”
c(1,2,3,4)+c(3,4,5,6) 输出4 6 8 10
c(1,2,3,4)+c(1,2) 输出2 4 4 6
1:6 输出1 2 3 4 5 6
c(1,2,3,4)>c(1,2,1,2) 输出FALSE FALSE TRUE TRUE

·单个数值(标量)是向量的一种特例
·向量的元素必须属于某种模式(mode),可以整型(integer)、数值型(numeric)、字符型
(character)、逻辑型(logical) 、复数型(complex)
·循环补齐(recycle):在一定情况下自动延长向量
·筛选:提取向量子集
·向量化:对向量的每一个元素应用函数
·使用seq()创建向量
·使用rep()重复向量常数
vector1 <- seq(2,10,2) 输出2 4 6 8 10
vector1 <- 1:10 + 2 输出3 4 5 6 7 8 9 10 11 12
vector2 <- 1: (10 +2) 输出1 2 3 4 5 6 7 8 9 10 11 12

用seq函数来玩一个数值积分,计算sin函数从0到pi的曲线下面积。基本思路就是用小矩形面积之和来近似精确值。
编辑框输入:
n<-100
h<-pi/n
x<-seq(from=0,to=pi,length=n)
rect<-sin(x)*h
sum(rect)
控制台输入:
curve(sin,0,2)
Plots框得出图形

group1 <- rep( 1: 3,times=c(8, 10,9)) 输出8个1,9个2,10个3
group2 <- factor(group1) 把数值型转化为因子型用于统计分析(组别)
vec_random1 <- runif(5) 生成0-1之间的5个随机数
vec_random2 <-sample(c('A",'B" ),size=10, replace=TRUE) 从A和B中随即不放回抽10次
输出 “A” “B” “A” “A” “A” “A” “B” “A” "A”“A”

vector c-rnorm( 10) 生成服从正态分布的随机变量
vec_max <- max(vector) 取最大值
vec_min <- min(vector) 取最小值
vector_trimmed <- vector[vector<vec_max & vector>vec_min] 去掉两边极值
vec_mean <- sum(vector_trimmed)/length(vector_trimmed ) 去掉极值后取均值

函数:

指数运算:exp(1) 输出2.72
exp(c(1,2,3,4)) 输出2.72 7.39 20.09 54.60

变量:

x<-c(1,2,3,4) 赋值
x=c(2,1,4,5)
x[2] 输出1
x[2:4] 输出1 4 5
x[-4] 输出2 1 4
x[x>2] 输出4 5

数组:

一种多维向量
a<-array(1:12,dim=c(3,4))
print(a) 输出三行四列:
1 4 7 10
2 5 8 11
3 6 9 12
a[2,1] 取出第二行第一列元素 输出2
a[2, ] 取出第二行所有元素 输出2 5 8 11
a[ ,3] 取出第三列所有元素 输出7 8 9

数据框(Data frame)

是一种类似Excel表格的数据结构,其中每列的数据类型可以不同,但数据长度必需一致
数据框非常适合用来进行数据分析,它的每一列可以代表数据的每个变量或属性,每一行可以代表一个样本
下面我们来构建一个有三个属性、五个样本的数据框。
city <-c( " beijing ’ , " shanghai" , ’ chengdu", ‘shanghai ’ , "beijing’)
age <- c(23,43,51,32,60)
sex <- c(‘F’,‘M’,‘F’,‘F’,"M’)
people <- data.frame(city,age,sex)
print(people)
输出:
city age sex
beijing 23 F
shanghai 43 M
chengdu 51 F
shanghai 32 F
beijing 60 M
$ 提取某一列
people a g e 或 p e o p l e [ ′ a g e ′ ] 或 p e o p l e [ , 2 ] 输 出 2341513260 p e o p l e [ p e o p l e age或people['age']或people[ ,2] 输出23 41 51 32 60 people[people agepeople[age]people[,2]2341513260people[peopleage>30, ]
输出年龄大于30的行并保留所有列
因子转换问题,如果不需要自动转换的话,你可以按如下方式手工进行参数设定。
data <- data.frame(city,temp ,stringsAsFactors=F)
数据框排序:order函数
order(data t e m p ) 返 回 从 小 到 大 的 位 置 排 序 d a t a [ o r d e r ( d a t a temp) 返回从小到大的位置排序 data[order(data temp)data[order(datatemp), ] 将数据从小到大排序
data[order(data t e m p , d e c r e a s i n g = T ) , ] 将 数 据 从 大 到 小 排 序 d a t a [ o r d e r ( d a t a temp,decreasing=T), ] 将数据从大到小排序 data[order(data temp,decreasing=T),]data[order(datatemp,decreasing=T), ][1:2,] 取出前两行子集

列表:

列表(List)是最为灵活的数据结构,它的不同元素可以是不同类型,也可以是不同长度
还是用age、city、sex三个向量来构建列表。
peoplelist <- list(age=age,city=city, sex=sex)
print(peoplelist)

对象和类:

R是一种基于对象的语言,所以在R语言中接触到的每样东西都是一个对象,对象中包含了我们需要的数据,同时对象也具有很多属性(Attribute)。
其中一种重要的属性就是它的类(Class),R语言中最为基本的类包括了数值、逻辑、字符
在此基础上构成了一些复合型的类,包括矩阵、数组、数据框和列表
对于任何一个对象,我们可以用class()函数来观察它的类。
同时可以用attributes()函数来观察其属性。
复合对象:
vector <- 1:12
my_matrix<- matrix(vector,nrow=3,ncol=4,byrow=F) 三行四列矩阵(按列排)
my_matrix<- matrix(vector,nrow=3,ncol=4,byrow=T) 三行四列矩阵(按行排)
dim(my_matrix) 输出行数和列数
dim(vector) <- c(4,3) 输出四行三列矩阵
print(vector)

矩阵:

vector1 <- vector2 <- vector3 <- rnorm(3) 把一个向量同时赋值给三个变量
my_matrix <-cbind (vector1, vector2,vector3) 按列把三个变量绑在一起,输出的是三行三列矩阵
ifelse(my_matrix>0,1,0) 把大于0的换成1,不大于0的换成0
my_mat = matrix(c(8,3,4,1,5,9,6,7,2),ncol=3) 输出三行三列矩阵
print(my_mat)
my_mat [1,1] + my_mat[1,2] + my_mat [1,3] 把第一行的第一列,第二列,第三列元素相加
sum(my_mat[1,]) 把第一行所有元素相加
rowSums(my_mat) 按行把每一横行相加
colSums(my_mat) 按列把每一竖列相加
sum(diag(my_mat)) 把对角线上元素相加
矩阵的退化
class(my_mat[1,])
[1]“numeric” 变量形式
class(my _mat[1,,drop=F])
[1]“matrix” 矩阵形式
求解线性方程组
A<- matrix(c(3,1,5,2),2,2)
b <- matrix(c(4,1),ncol=1)
x<- solve(A,b) 解得3 -1

模型与公式:

模型是用以描述数据的简洁方式,很多时候模型以公式的形式展现,用以预测或解释。
下面我们用一个具体的线性回归例子来看一下,使用的数据集是R内置的数据car。R语言中用于回归的函数是lm,回归后的结果存入变量model中。
model <- lm(formula=dist ~ speed,data=cars)
summary函数提供了关于回归结果更为丰富的信息,包括了各系数及其对应的P值,残差标准误和决定系数等。也可以用前面提到的class和attributes函数来了解model这个对象

算数运算:

×+y加法 x- y减法 x*y乘法 x / y除法 x^y乘幂 x%%y模运算 x %/%y整数除法

逻辑运算:

x ==y判断是否相等
x<=y判断是否小于等于
x >= y判断是否大于等于
x&y向量的逻辑“与""运算(x、y以及运算结果都是向量)
x | y向量的逻辑“或"运算(x、y以及运算结果都是向量)
!x 逻辑非
逻辑值TRUE和FALSE可以缩写为T和F(两者都必须是大写)。而在算术表达式它们会转换为1和0

缺失值与空值:

temp <- c(27,29,23,14,NA)
mean(temp) 输出NA
mean(temp, na.rm=T) 将缺失值删除后求均值
is.na(temp) 判断哪个是缺失值,输出TRUE FALSE
缺失值的意义是应该有数据而没有,起到一个占位符的作用。
空值的意义则是完成没有,空值的表示是NULL。
temp <- c(27,29,23,14,NULL) 输出27 29 23 14
NULL有时候可以用来方便的删除复杂对象中的一个元素 例如:data_lists$data <-NULL

连接对象:

R语言中的连接是指一类可以反复调用的输入输出对象。
常见的连接包括了文本连接、文件连接、网络连接、压缩文件以及管道
文本连接:
textcon<- textConnection( 'output ’ , ‘w’)
sink(textcon)
x<- rnorm(10)
summary(x)
print(‘这句话并没有显示在终端上,而在被写入了output对象’)
sink()
print(output)
close(textcon)
文件连接:
filecon<- file('output.txt ', ‘w’)
sink(filecon)
x<- rnorm(10)
summary(x)
print(‘这句话并没有显示在终端上,而在被写入了output对象’)
sink()
close(filecon)
browseURL( 'output.txt ')

公式:

形式均是类似y-x的这种写法。波浪号左侧为因变量,波浪号右侧为自变量。
如果数据中变量较少我们可以直接手工输入,但如果遇到几十个变量,我们可以编程生成公式。
下面的例子就是生成有50个自变量的公式。
n <-1:50
xvar <- pasteo(‘x’,n)
right <- paste(xvar , collapse=’+’)
left <- ‘y~’
my_formula <- paste(left, right)
my_formula <- as.formula(my_formula)
class(my_formula)

表达式:

表达式就是一些对象运算符构成的代码组合
表达式一般会在R解释器中立刻执行,但有些情况下我们希望表达式也可以暂缓执行。
ex<-expression(x <- seq(1,10,2))
print(x)
使用eval函数运行这个表达式
eval(ex)
还有些情况下,表达式是以字符串形式存在的,
此时我们需要先用parse函数将其解析,转义为表达式,再用eval运行表达式。
tex<- c( ‘z<-seq(1,10,2)’ , ’ print(z)’)
eval(parse(text=tex))

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值