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.name12个月的英文名,month.abb12个月的英文名前三个字母缩写。

在运算方面,加减乘除是对一个向量的所有数据进行批量操作。要注意一些运算的写法与主流语言不同:

取模(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) #标准正态分布分位数函数

标准正态分布函数:Φ(x)=xϕ(t)dt\Phi(x)=\int_{-\infty}^{x} \phi(t) d t ,标准正态分布密度:(x)=12πe12x2\emptyset(x)=\frac{1}{\sqrt{2\pi}}e^{-\frac{1}{2}x^2} ,标准正态分布分位数函数(表示在相应概率时的值):Φ1(x)\Phi^{-1}(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 = "分段函数")
#画图
9VBVF.png

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)
9s4QI.png

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="对上海市市民买菜的统计")
9sBim.png