R语言·绘图入门&数据基本操作

小罗碎碎念

想必大家选这门课的初衷,大多是想利用R语言来画图,所以,本章的内容首先从常见的统计图讲起。讲完绘图部分以后,会介绍一下数据的基本操作,包括向量以及高级数据结构等。


一、绘图入门

首先给你看一看R语言强大的绘图功能,怎么样,是不是很腻害。但是万丈高楼平地起,我们慢慢来。

R 中的常量分为四种类型:

  1. 逻辑型:TRUE和FALSE;
  2. 数值型:25.6, 3.1415926;
  3. 字符型:身份证号码“11010”和地名“Beijing”;
  4. 因子型:分类数据(性别:男,女)和顺序数据(职称:助教,讲师,副教授,教授)。

给变量赋值用“=”或者“<-”,如

[1] 3

[1] 4

需要注意的是,R中的变量名区分大小写。因此,X和x是两个不同的变量。


1-1:向量的生成

向量是R语言中**最基本**的数据结构,它由一组相同类型的元素组成。这里插播个小技巧,因为我之前RStudio的控制台和工作环境中都还有上一次调试代码的记录,不方便我接下来展示,所以我需要清空控制台和工作环境。

  1. 清空控制台:Ctrl+L
  2. 清空环境:rm(list=ls())或者点击小扫把图标。

好,现在回归正文!R中有个非常有用的命令可以生成向量:

连接命令c

这里插一嘴,c表示connect,取的是首字母,不要以为c代表向量哈。

b<-c("cat","dog","fish") b

例:生成因子型常量的R程序

类别变量在R中称为因子(factor),因子的取值称为水平(level)

x<-c("Beijing", "Shanghai", "Beijing", "Beijing", "Shanghai") y<-factor(x) y

输出结果:

有些同学可能看着输出结果有些懵,我解释一下——这段代码首先创建了一个名为x的向量,其中包含了5个字符串元素,分别是"Beijing"、“Shanghai”、“Beijing”、“Beijing"和"Shanghai”。然后,使用factor函数将x向量转换为一个因子向量y

factor函数将一个向量转换为因子类型,将向量中的每个元素转换为一个因子级别。在这个例子中,factor函数将x向量中的每个元素转换为一个单独的因子级别。由于factor函数的默认行为是将字符串类型的元素转换为因子级别,因此y向量中将包含5个因子级别,分别对应于x向量中的每个元素。

最后,使用y变量来输出转换后的因子向量。在R中,如果未指定因子向量的水平(levels),则默认情况下,R将使用元素本身作为因子水平。因此,在这种情况下,y向量的因子水平将是x向量中的所有不同元素,即"Beijing"和"Shanghai"。

其实想搞懂代码是什么意思,还有一个很简单的方法,就是稍微对它做一些改动即可,比如我们再添加一个城市——Guangzhou。


1-2:向量与标量的运算

其结果为对向量中每一个元素进行运算。

例子


1-3:向量与向量的运算

如果两个向量长度相等,则运算结果为对应位置元素进行标量运算;如果两个向量长度不等,则将较短向量做循环运算。

例子

x=c(1,2,5) y=c(10,11,12) x+y

x=c(1,2) y=c(10,11,12,13) x+y

这里稍微注意一下,因为x比y短,所以12对应1,13对应2。同理,为了方便大家理解,我把代码简单修改一下。

你会发现,其实就是1依次与每一个数相加。


1-4:R中常用的统计计算函数

maxminmeanmediansdvarsum
最大值最小值均值中位数标准差方差求和


二、绘图实操

五种常见的统计图的画法

  1. 折线图
  2. 饼图
  3. 柱形图
  4. 直方图
  5. 箱式图

R语言画图参考网站:R语言 | 数据分析–统计绘图。我看了一下,内容挺多,但是排版我不喜欢,所以我找时间重新整理一遍,再补充一些新的东西进去。


2-1:折线图

plot函数:它是R中最常用的画图命令,可以绘制大多数常用的点图、线图。

语法结构为:plot(x,y,…)

例如

x=seq(0,10,0.5) y=sin(x) plot(x,y,type="o",xlab="X", ylab="sin(X)")

这段R代码定义了一个从0到10的等差数列,公差为0.5,并将其存储在变量x中。然后,代码计算了x中每个元素的sin值,并将结果存储在变量y中。最后,代码使用plot()函数绘制了x和y的散点图,其中type="o"表示使用圆圈来表示数据点,xlab=“X"表示x轴的标签为"X”,ylab="sin(X)“表示y轴的标签为"sin(X)”。

接着上述程序,可以添加更多的信息:

points(x+1,y,pch=5) lines(x+1,y,lwd=2) title("Plot of sin(X)")

这段R代码在之前的基础上,添加了以下内容:

  • points(x+1,y,pch=5):使用points函数在坐标系中绘制了一些点,这些点的横坐标是x+1,纵坐标是y,使用符号pch=5表示绘制圆点。
  • lines(x+1,y,lwd=2):使用lines函数绘制了一条线,这条线的横坐标是x+1,纵坐标是y,线宽为2。
  • title("Plot of sin(X)"):使用title函数给图表加上了一个标题,标题是"Plot of sin(X)"。

正常情况下,你输出的应该和我下面这幅图一样,但是,你会发现PPT上给的图不太一样——第一条曲线的颜色是红色,而我们这仍然是黑色。

不要慌,我们来改一下代码,你直接整体复制过去就行,其实就在plot后面加了一个参数。

x=seq(0,10,0.5) y=sin(x) plot(x,y,type="o",xlab="X", ylab="sin(X)",,col="red") points(x+1,y,pch=5) lines(x+1,y,lwd=2) title("Plot of sin(X)")


2-2:饼图

饼图就是将一个圆(或者圆饼)按分类变量分成几块,每一块所占的面积比例就是相对应的变量在总体中所占的比例。

【例1】随机产生10年的数据

year<-2001:2010 counts <- sample(100:500,10) lb <-paste(year,counts,sep=":") #构造标签 pie(counts,labels=lb) #画饼图

这段R语言代码的功能是创建一个饼图,显示从2001年到2010年的10个不同年份的样本计数。

首先,使用year<-2001:2010定义了一个向量year,包含了从2001年到2010年的10个整数。

然后,使用sample(100:500,10)函数从100到500中随机抽取10个整数,并将结果存储在向量counts中。

接下来,使用paste(year,counts,sep=":")函数构造了标签向量lb,其中每个元素都是一个由年份和相应的计数组成的字符串,例如2001:123。具体来说,paste函数是R语言中用于连接字符串的函数,它将两个或多个字符串连接在一起,并用指定的分隔符将它们分隔开。在这个例子中,paste函数的第一个参数是year向量,第二个参数是counts向量,它们用冒号作为分隔符连接起来。因此,lb向量中的每个元素都是一个由一个年份和一个计数值组成的字符串,例如2001:123这条代码的作用是将年份和计数值组合成标签,以便在后续的绘图过程中使用。在使用pie函数绘制饼图时,labels参数需要指定一个与counts向量相同长度的字符串向量,以便将每个数据点与一个标签对应起来。因此,lb向量的长度必须与counts向量相同,以便正确地匹配每个数据点。

最后,使用pie(counts,labels=lb)函数创建了一个饼图,显示了counts向量中的样本计数,并将lb向量中的标签字符串作为饼图的标签。

因此,这段代码的目的是创建一个饼图,显示从2001年到2010年的10个不同年份的样本计数,并将每个年份的计数作为饼图的标签。


2-3:柱形图

柱形图就是通过垂直或者水平的柱形去展示分类变量的频数。

利用例1数据绘制柱形图。

year<-2001:2010 counts <- sample(100:500,10) barplot(counts,names.arg=year,col = rainbow(10))

这段代码使用barplot函数创建了一个条形图,显示了counts向量中的样本计数。names.arg=year参数将year向量中的每个元素作为条形图的标签。col = rainbow(10)参数将条形图的每个条纹颜色设置为不同的彩虹颜色。

因此,这段代码的目的是创建一个条形图,显示从2001年到2010年的10个不同年份的样本计数,并将每个年份的计数作为条形图的标签,同时使用彩虹颜色来区分不同的年份。

注意,由于数据是随机采样生成的,所以每年的样本的数量都是不固定的,不信的话,你可以多运行几次。


2-4:直方图

前面介绍的三种图形一般都是用来处理二维数据的,那么对于一维数据,常用的图形就有这里所说的直方图。直方图在横轴上将数据值域划分成若干个组别,然后在纵轴上显示其频数。

在R语言中,可以使用hist函数来绘制直方图

x<-rnorm(100,0,1) hist(x)

这段R代码执行以下操作:

  1. 创建一个名为x的向量,长度为100。
  2. 使用rnorm()函数从均值为0、标准差为1的正态分布中随机抽取100个值。
  3. 将得到的向量赋值给变量x
  4. 使用hist()函数创建一个直方图,用于展示向量x中的数据分布。

rnorm()函数是R语言中的随机数生成函数,用于生成服从正态分布的随机数。在这个例子中,我们设置了均值为0,标准差为1,其实就是常见的标准正态。

hist()函数创建一个直方图,用于展示输入向量的分布。直方图将根据向量中的值绘制条形图,其中**条形的高度表示该值在向量中出现的频率**。在这个例子中,我们将看到一个展示100个随机正态分布值的直方图。

注意,PPT里的图压缩了,是因为老师直接复制粘贴过来的,这个时候你看到是什么样子,就会是什么样子,如果不想图片看起来怪怪的,要么导出,要么就把Plots的界面放大。


2-5: 箱线图

箱线图通过绘制连续型变量的五个分位数(最大值、最小值、25%分位数、75%分位数以及中位数)描述变量的分布。

x1<-rnorm(100,0,1) x2<-rnorm(100,1,1) boxplot(x1,x2, names = c("x1","x2"), col = c("red","blue"))


三、“Pima”数据集

R语言程序包MASS中有内嵌数据集“Pima”,该数据集包含了532个样本的血清胰岛素记录数据,这些数据是由美国国家糖尿病和消化及肾脏疾病研究所收集的住在亚利桑那州凤凰城附近的皮马印第安人妇女的数据。

在画图前,首先完成一些准备工作。

library(MASS) #加载MASS软件包 data(Pima.tr) #加载Pima.tr数据集 Pima = rbind(Pima.tr,Pima.te) # 合并数据集 # 抽取数据举例 Pima_n=Pima[Pima$type=='No'& Pima$age==22,] #抽取Pima数据集中年龄=22岁,非糖尿病患者的数据

3-1:直方图举例

#画出Pima_n中血压的直方图

hist(Pima_n$bp,main="Histogram of diastolic \n blood pressure",xlab="Blood pressure (mm Hg)")

这段代码是R语言中绘制直方图的代码,主要用于展示Pima_n数据集中舒张压(diastolic blood pressure)的分布情况。

直方图是一种统计图表,用于展示连续性变量的分布情况。在这段代码中,主要做了以下几件事情:

  1. 调用hist()函数:这是一个内置的R函数,用于绘制直方图。
  2. 传入两个参数:
  • Pima_n$bp:这是我们要绘制直方图的数据,来自Pima_n数据集。bp表示blood pressure,即血压。
  • main:这是一个字符串,用于**表示直方图的标题**。这句代码将标题设置为"Histogram of diastolic \n blood pressure",意为“舒张压的直方图”。
  • xlab:这是一个字符串,用于**表示横轴(x轴)的标签**。这句代码将横轴标签设置为"Blood pressure (mm Hg)",意为“血压(毫米汞柱)”。

这段代码可以帮助研究人员更好地了解舒张压在Pima_n数据集中的分布特征,从而为进一步的数据分析和研究提供可视化依据。


3-2:折线图举例

整个代码的主要目的是**展示糖尿病患者随着年龄变化的血糖中位数分布情况**,从而帮助研究人员更好地了解糖尿病患者的血糖水平随着年龄的增长而发生的变化。

Pima_y=Pima[Pima$type=='Yes',] # 抽取糖尿病患者的数据 medglu = tapply(Pima_y$glu,Pima_y$age,median) # 计算每个年龄血糖的中位数 plot(medglu,xlab="Age",ylab="Median glu",type="o") # 画出年龄与血糖的折线图 title("Median plasma glucose concentration \n at different ages")

这段R代码主要用于提取糖尿病患者的数据,并计算不同年龄组血糖的中位数,最后绘制年龄与血糖中位数的折线图。以下是代码的详细解释:

Pima_y=Pima[Pima$type==‘Yes’,]

这行代码**从Pima数据集中筛选出糖尿病患者的数据**。其中,Pima是数据集的名称,'Yes’表示筛选条件,即筛选出类型为’Yes’的行,这些行对应的是糖尿病患者。

medglu = tapply(Pima_y g l u , P i m a _ y glu,Pima\_y glu,Pima_yage,median)

这行代码**计算每个年龄组血糖的中位数tapply()函数用于对数据进行分组计算**,这里将Pima_y数据按照年龄(Pima_yage)分组,并对每组的血糖值(_Pimay_glu)求中位数。

plot(medglu, xlab=“Age”, ylab=“Median glu”, type=“o”)

这行代码**绘制年龄与血糖中位数的折线图**。plot()函数用于绘制折线图,传入的参数包括:

  • medglu:上一步计算得到的血糖中位数数据。
  • xlab:横轴标签,设置为"Age",表示横轴为年龄。
  • ylab:纵轴标签,设置为"Median glu",表示纵轴为血糖中位数。
  • type:“o”,表示绘制折线图时使用的符号类型,这里使用的是圆点。

title(“Median plasma glucose concentration \n at different ages”)

这行代码设置图表的标题。标题为"Median plasma glucose concentration at different ages",意为“不同年龄组血糖中位数的变化”。


3-3:饼图举例

这段代码的目的是**从Pima_y数据框中提取怀孕次数的数据,并绘制一个饼图显示不同怀孕次数的百分比**。

xx = Pima_y$npreg # 抽取怀孕次数的数据 t = table(xx) # 计算频数 data = as.data.frame(t) #将频数表转换成数据框 colnames(data) = c('npreg', 'Freq') #修改数据框的列名 percentage = round(data$Freq / sum(data$Freq), 2) * 100 # 计算百分比 percentage = paste0(percentage, "%") # 添加百分号 lb = paste0(names(t),": ",percentage) # 添加标签 pie(data$Freq, labels=lb) # 画出饼图 title("Piechart of numbers of pregnancies") # 添加标题

下面我将逐行解释这段代码:

xx = Pima_y$npreg

Pima_y数据框中提取怀孕次数的数据,并将其存储在名为xx的向量中。

t = table(xx)

使用table函数计算xx向量中每个元素的频数,并将结果存储在名为t的向量中。

data = as.data.frame(t)

t向量**转换为数据框格式**,以便后续操作。

colnames(data) = c('npreg', 'Freq')

修改数据框data的列名,使其包含“npreg”和“Freq”两列,相当于给表格的列取个名字。

percentage = round(data$Freq / sum(data$Freq), 2) * 100

计算每个怀孕次数的百分比。这里我们先计算每个怀孕次数的频率占总频率的比例,然后将结果四舍五入到小数点后两位,并乘以100,得到百分比。

percentage = paste0(percentage, "%")

在百分比后面添加一个百分号。paste0()是R语言中的一个函数,用于将字符串拼接起来。

lb = paste0(names(t),": ",percentage)

创建一个字符串向量lb,其中包含每个怀孕次数的名称和对应的百分比。

pie(data$Freq, labels=lb)

使用pie函数绘制饼图,显示不同怀孕次数的百分比。data$Freq表示每个怀孕次数的频率,labels表示对应的标签。

title("Piechart of numbers of pregnancies")

为饼图添加标题“Piechart of numbers of pregnancies”,表示饼图的主题是怀孕次数的饼图。


3-4:柱形图举例

这段代码**首先创建一个条形图,显示Pima_n数据框中BMI和皮肤厚度的分布情况,然后添加一个图例说明各个条形的含义最后添加一个标题表示图表的主题**。

barplot(rbind(Pima_n$bmi,Pima_n$skin),col=c("orange","brown")) legend("topleft", c("BMI","skin"), cex=0.6, fill=c("orange","brown")) title("BMI and skin thickness")

下面我将逐行解释这段代码:

barplot(rbind(Pima_n$bmi, Pima_n$skin), col=c("orange", "brown"))

使用barplot函数创建一个条形图,横轴表示Pima_n数据框中的BMI和皮肤厚度(skin)两个变量。rbind()函数将这两个变量组合成一个矩阵,然后barplot()函数根据这个矩阵的行和列创建条形图。col参数表示每个条形的颜色,这里使用c("orange", "brown")表示两个颜色。

legend("topleft", c("BMI", "skin"), cex=0.6, fill=c("orange", "brown"))

创建一个图例,显示条形图中的颜色和标签"topleft"表示图例的位置,c("BMI", "skin")表示图例中的标签,cex=0.6表示标签的字体大小,fill=c("orange", "brown")表示图例中填充的颜色。

title("BMI and skin thickness")

为图表添加标题,表示图表的主题是BMI和皮肤厚度。


3-5:箱式图举例

这段代码首先从Pima数据集中提取了年龄为22岁且患有糖尿病的患者数据,然后绘制了糖尿病患者和非糖尿病患者的血糖浓度箱线图,最后为图表添加了一个标题。

Pima_y=Pima[Pima$type=='Yes'& Pima$age==22,] #抽取Pima数据集中年龄=22岁,糖尿病患者的数据 boxplot(Pima_y$glu,Pima_n$glu,names=c("Diabetes","Non-diabetes"),ylab="glu",col=c("red","blue")) # 画出箱式图,比较糖尿病患者和非糖尿病患者的血糖浓度 title("Plasma glucose concentration")

下面我将逐行解释这段代码:

Pima_y=Pima[Pima$type=='Yes'& Pima$age==22,]

这一行代码用于从Pima数据集中筛选出满足以下条件的行:年龄等于22岁且糖尿病状态为’Yes’。Pima$type表示糖尿病状态,'Yes’表示糖尿病患者。&符号用于同时满足两个条件。筛选后的数据将被存储在Pima_y数据集中。

boxplot(Pima_y$glu, Pima_n$glu, names=c("Diabetes", "Non-diabetes"), ylab="glu", col=c("red", "blue"))

这一行代码使用boxplot函数绘制箱线图,比较糖尿病患者(Pima_y数据集中的血糖浓度)和非糖尿病患者(Pima_n数据集中的血糖浓度)的血糖浓度。names参数表示每个分组对应的标签,ylab参数表示纵轴标签,col参数表示每个分组的颜色。

title("Plasma glucose concentration")

这一行代码为图表添加标题,表示图表的主题是血浆血糖浓度。


四、数据的基本操作

4-1:向量的基本操作

练习:score是⼀组学⽣的成绩,grade是相应的学⽣所在的年级,NA表示该学⽣缺考。

score=c(90,0,78,63,84,36,NA,84,58,80,75,85,72,78,86); grade=c(3,3,3,4,3,3,3,3,3,3,3,4,3,4,4)

在R中实现以下功能:

(1)计算学⽣总⼈数;

首先加载数据

输入


(2)计算参加考试的学⽣⼈数;

先排除缺失值的影响

newscore<-na.omit(score) newscore

这段代码的主要目的是从score向量中删除缺失值(NA),并创建一个新的向量newscore以便在进行后续分析时排除缺失值的影响。下面我逐行解释这段代码:

newscore<-na.omit(score)

na.omit()函数用于从向量score中删除缺失值(NA)。删除缺失值后,剩余的元素将被存储在新创建的向量newscore中。

newscore

此时,newscore向量包含了score向量中非缺失值的数据。你可以对newscore向量进行进一步的操作,如统计分析、绘图等。

总之,这段代码的作用是从score向量中删除缺失值,创建一个新的向量newscore

这里对代码的输出结果做一个小小的解释:

attr(,"na.action")attr(,"class")分别输出na.omit()函数返回的元数据。[1] 7表示删除的缺失值数量为第7个。[1] "omit"表示删除缺失值时执行的操作类型为omit,即删除缺失值。

这时候再来统计人数


(3)缺考的学⽣为进修⽣,成绩综合评定为80分,请补登成绩;


(4)将三年级和四年级的学⽣成绩分别⽣成两个新的数据向量score3和 score4;

三年级

score3=score[grade==3] score3

四年级

score4=score[grade==4] score4


(5)对(4)中⽣成的两组学⽣成绩从⼤到⼩排序;

三年级

newscore3<-rev(sort(score3)); newscore3

这段代码的主要目的是对向量score3进行排序,然后**颠倒排序后的结果**,创建一个新的向量newscore3

首先,sort(score3)对向量score3进行**升序排序**。然后,rev()函数颠倒排序后的结果。这意味着原本排序后的向量score3中的元素顺序将被颠倒。

四年级

newscore4<-sort(score4, decreasing=TRUE); newscore4

首先,sort()函数接收两个参数,第一个参数是待排序的向量score4,第二个参数**decreasing=TRUE表示降序排序**。这意味着score4中的元素将按照从大到小的顺序进行排序。


(6)将(5)中两组数据合并,取名为task1。

task1<-c(newscore3, newscore4); task1


4-2:对象的类别

1. 向量(vector)

⼀系列元素的组合。

2. 因⼦(factor)

因⼦是⼀个分类变量,如“a” , ”a” , ”a” , ”a” , ”b” , ”b” , ”b” , ”c” , ”c”

3. 数组(array)

数组是k维的数据表。

4. 矩阵(matrix)

矩阵是数组的⼀个特例,维数k = 2。

5. 数据框(dataframe)

是由⼀个或⼏个向量和(或)因⼦构成,它们必须是等⻓的,但可以是不同的数据类型。

6. 列表(list)

列表可以包含任何类型的对象。


4-3:矩阵

定义矩阵的语法为matrix(data, nrow, ncol, byrow=T)

例如,输入以下代码,主要目的是**创建一个矩阵xx,其中包含从1到6的整数**。

x=1:6 xx<-matrix(x,nrow=3,ncol=2,byrow=T) xx

下面我逐行解释这段代码:

x = 1:6

这是一个向量,包含从1到6的整数。

xx <- matrix(x, nrow = 3, ncol = 2, byrow = T)

matrix()函数接收以下参数:

  • x:待转换为矩阵的向量。
  • nrow:矩阵的行数。此处设置为3,表示创建一个3行矩阵。
  • ncol:矩阵的列数。此处设置为2,表示创建一个3行2列的矩阵。
  • byrow:逻辑值,表示是否按行填充矩阵。此处设置为T(真),表示**按行填充矩阵**。

给矩阵的⾏列命名

dimnames(xx)=list(c("a","b","c"), c("x","y")) xx


矩阵中⾏、列元素的选取

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传


如果省略⾏标,则表示选择某⼀列,如

省略列标表示选择某⼀⾏,如

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传


矩阵的运算:数乘

a=matrix(c(1,2,3,4),nrow=2,ncol=2,byrow=T) a

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传


矩阵相加

b=matrix(c(5,6,7,8),nrow=2,ncol=2,byrow=T) b

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传


矩阵的合并:增加⾏⽤rbind函数,增加列⽤cbind函数,如

a add<-c(5,6) rbind(a,add)


4-4:数组

数组就是多维矩阵,定义数组的语法为:array(data,dimnames),例如

a<-array(1:24,c(3,4,2)) a


4-5:数据框

矩阵中的所有元素必须为同⼀类型,⽽在数据框中,不同的列可以取不同的数据类型,相当于⼀个数据库中的表结构。如

a=matrix(c(1,2,3,4),nrow=2,ncol=2,byrow=T) a t<-c("good","good") t at<-data.frame(a,t) at

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传


4-6:列表

数据框中,要求被插⼊的数据⻓度与原来的⻓度⼀致。列表是⽐数据框更为松散的数据结构,可以将不同类型、不同⻓度的数据打包。例如

a=matrix(c(1,2,3,4),nrow=2,ncol=2,byrow=T); t<-c("good","good"); at<-list(a,t) at

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传


五、编写程序

5-1:控制结构

R的控制结构采取if…else语句,如:

x=1; if(x==1) { print("x is true"); }else { print("x is false"); }


5-2:循环结构

常⽤的为for语句。例如,若要计算1+2+3+…+100的值,R程序为:

total<-0; for(i in 1:100) { total<-total+i; } total

当然,对于上述问题有更简单的R语句:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传


5-3:函数

在实现复杂算法的时候,编写函数可以重复调⽤,常⽤的函数控制命令为function语句。例:

f<-function(x,y){c(x+1,y+1)} f(1,2)

这段代码定义了一个名为f的函数,用于计算两个输入参数xy的和,并将结果返回。下面我逐行解释这段代码:

  1. f <- function(x, y):这行代码定义了一个名为f的函数,它接受两个参数:xy
  2. c(x + 1, y + 1):这是函数的计算逻辑。c()函数是R语言中的组合函数,用于将多个向量元素组合成一个向量。在这个例子中,它将x + 1y + 1两个向量元素组合成一个新向量,然后返回这个新向量。

因此,f函数接收两个输入参数xy,计算它们的和(分别为x + 1y + 1),并将结果组合成一个新向量返回。换句话说,f(x, y)的结果是一个包含两个元素的新向量,分别为x + 1y + 1

由此衍⽣出了⼀个很实⽤的⼩技巧:在 R 控制台中输⼊⼀个函数名,就可以得到这个函数的代码。例如:


六、练习

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传


  • 6
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值