R语言学习笔记
从最简单的开始
1.你好世界!
string = "Hello World!"
print (string)
特别的是,赋值也可以使用<-
和->
,同时,你可以连续赋值,如下:
a = b = c = 6
a <- 6 -> b ->c
运行完代码可以发现,在Hello World的前面出现了字符[1]
。为了应对单个向量的多个数据输出,R语言会使用换行,并在每行开头标上第一个数据是第多少个。
对于需要多个结果拼接的输出,可使用cat()
,并可以进行文件输出:
cat("窝窝头",1,"块钱",4,"个","嘿嘿!!",file="")
追加文件写入需要再加一个append参数:
cat("涨价了,现在一块钱一个",file="E:\\wowotou.txt",append=TRUE)
对于文件的输出,还可以使用sink()函数,这是一个类似于freopen的效果,使之后的输出都进入文件:
sink("F:\\mihomo.txt")
sink("F:\\mihomo.txt", split=TRUE) #保留控制台输出
sink() #取消文件形式输出
2.变量与运算
恭喜你,在R语言里,你同样无需申明变量。需要注意的是,字符串既可以使用单引号,也可以使用双引号包裹。
每一个变量都是一个可以包含多个数据的向量,你可以随时往里面塞进任何东西。一般使用c()
表示向量。特别的,可以使用英文冒号表示几到几的数字。
x1 = 1:5
x1 = c(1,2,3,4,5)
x1 = seq(1,5,length=5)
y1 = rep(x1,times=1,length=10,each=2) # 双写x1!1122334455
y1 = rep(x1,times=2,length=10,each=1) # 双倍x1!1234512345
值得一提的是,在R语言中有一些内置的常量可以引用:LETTERS
大写字母,letters
小写字母,pi
值为3.141593,month.name
12个月的英文名,month.abb
12个月的英文名前三个字母缩写。
在运算方面,加减乘除是对一个向量的所有数据进行批量操作。要注意一些运算的写法与主流语言不同:
取模(mod):%%
整除:%/%
幂运算:^或**
或:|
与:&
和第一个元素或:||
和第一个元素或:&&
对场内变量进行查询或删除:
print(ls()) #输出已定义的变量
rm(homo) #删除homo变量
3.注释
与python相同,#后面的均为注释。R语言中没有多行注释。
4.条件语句
与C语言完全相同:
if(条件)
{
#执行
}
else
{
#执行
}
为了偷懒,也可以使用ifelse()
函数,也同样支持嵌套:
ifelse(条件1,true执行,
ifelse(条件2,true执行,false执行))
5.循循循循循循环!
while的用法与C相同,表示如果()就重复执行。
for的用法与python相同,大括号规则与C相同:
for(i in 5)
{
print(i)
}
repeat
循环等同于 while(true)
,等待 break
指令退出循环。
i=1
repeat
{
print(i)
i <- i+1
if(i==6)
{
break
}
}
6.列表,矩阵
与python一样,例表中可以储存不同类型的向量,并可以用names()
给每个元素命名并访问:
need <- list("窝窝头",c(1,2,3,4),"块钱",c(4,8,12,16),"个")
names(need) <- c("名字","价钱","文字","个数","文字")
print(need[2])
print(need$价钱)
need[4] <- "先到先得" #添加元素
need[4] <- NULL #删除元素
同时,还可以使用c(list1,list2)
来合并列表,使用unlist()
来让列表转换为向量。
对于矩阵,R语言使用matrix()来创建:
matrix(data = 数据, nrow = 行数, ncol = 列数, byrow = 一个bool值,true为按行排列,否则为按列排列,dimnames = 行列名,输入一个两个向量组成的列表)
矩阵可以直接使用运算符进行运算,非常简单。
a = c(1,2,3,4,5,6)
n = list(c("hang1","hang2"),c("lie1","lie2","lie3"))
oo = matrix(a,2,3,byrow=TRUE,dimnames=n)
print(oo)
print(oo[1,2]) #第一行第二列
print(oo[1,]) #第一行
print(oo[,2]) #第二列
7.一些可能s用得到的包
可以用于美化图形:
# install CRAN packages
install.packages(c("tidyverse", "colorspace", "corrr", "cowplot",
"ggdark", "ggforce", "ggrepel", "ggridges", "ggsci",
"ggtext", "ggthemes", "grid", "gridExtra", "patchwork",
"rcartocolor", "scico", "showtext", "shiny",
"plotly", "highcharter", "echarts4r"))
# install from GitHub since not on CRAN
install.packages(devtools)
devtools::install_github("JohnCoene/charter")
数学函数
1.根号,指数,对数
exp(i) #表示自然对数e的i次方
sqrt(i) #表示i开二次根
log10(i) #表示lgi
log(i) #表示lni
那么就有小朋友要问了,开三次根怎么写呢?当然要使用另外一种表达方式了:
x = i^(1/3)
2.四舍五入与取整
这个简单,看一眼就懂。
abs(-1.14514) #绝对值
round(1.14514,2) #四舍五入到小数点第二位
floor(1.14514) #向下取整
ceiling(-1.14514) #向上取整
trunc(-1.14514) #向0取整
3.三角函数
需要注意,输入的是弧度值。
sin(pi/3) #正弦
cos(pi/3) #余弦
tan(pi/3) #正切
反三角函数在前面加a即可:
asin(pi/3) #反正弦
acos(pi/3) #反余弦
atan(pi/3) #反正切
4.正态分布和分位数函数
pnorm(x) #标准正态分布函数
dnorm(x) #标准正态分布密度
qnorm(x) #标准正态分布分位数函数
标准正态分布函数: ,标准正态分布密度: ,标准正态分布分位数函数(表示在相应概率时的值):。
作图时间!
1.曲线函数
使用curve()函数来绘制曲线,范围为第二个参数到第三个参数。
curve(sin(x),-pi,pi) #来一段三角函数
abline(h=0) #添加参考线
png(file = "sin.jpg") #生成图片
pdf(file = "sin.jpg",1,1) #生成1:1的pdf文件
curve函数其实可以加入的参数很长:
curve(函数,from=起点,to=终点,n=一个整数,表示x取值数量,add=一个bool值,为真时将绘图加入到原来的图上,type="p"为点,"l"为线,"o"为同时绘制点和线,且线穿过点,xname=x轴变量名称,xlim=两个数字组成的向量,表示x轴范围,ylim=y轴范围,xlab=x轴标签名称,ylab=y轴标签名称,main=主题名称)
还有plot也支持画图,除了前两个是xy向量(需保证长度相同),其余与curve函数参数相同:
# 定义函数 f
f = function (x) {
if (x >= 0) {
x
} else {
x ^ 2
}
}
x = seq(-2, 2, length=100)# 生成自变量x
y = rep(0, length(x))# 生成空的因变量y
j = 1
for (i in x) {
y[j] = f(i)
j = j + 1
}# 赋值因变量y
plot(x,y,type = "l", col = "red", xlab = "x轴", ylab = "y轴",main = "分段函数")
#画图
2.条形图
使用barplot()来绘制条形图,参数也很多,为了简单,就少写一点啦:
barplot(H=数据,xlab=x轴标签,ylab=y轴标签,main=主题,names.arg=每个柱子的标题,col=颜色)
agree = c(7,71,2222)
flag = c("不同意","弃权","同意")
co=c("#ED1C24","#BDBDBD","#22B14C")
barplot(agree,ylim=c(0,2500),xlab="立场",ylab="人数",main="不同意的请举手",names.arg=flag,col=co)
3.饼状图
使用pie()来绘制二维饼状图,pie3D()来绘制三维饼状图,参数也很多:
pie(x=数值, labels = 每个扇的名字, radius = 半径,clockwise = 一个bool值,表示是否切开, density =底纹密度, angle = 底纹斜率, col = 颜色, main = 标题)
shu=c(87,203,15)
names=c("收到政府的蔬菜包","家里囤着有菜无需购买","正在网上购买")
co=c("#47f5ac","#c8ffa6","#cdd6c7")
pie(shu,labels=names,col=co,main="对上海市市民买菜的统计")