R语言基础的代码语法解译笔记

1、双冒号,即:“::”

要使用某个包里的函数,通常做法是先加载(library)包,再调用函数。最新加载的包的namespace会成为最新的enviroment,某些情况下可能影响函数的结果。而package name::functionname的用法,一是可以在需要用某个函数时临时直接加载包,不用事先library。另一点更重要的是尽可能减少library带来的附带作用,这一点在开发R包时影响较大。而这种写法的副作用,是会稍微慢上那么几毫秒,在需要反复循环使用一个函数时对效率有影响,其他时候除了写起来麻烦一点,基本没有显见的副作用。

2、%>% (向右操作符,forward-pipe operator)

把左侧的数据或表达式,传递给右侧的函数调用或表达式进行运行,可以连续操作。相当于将左边的作为右边函数的第一个参数。

现实原理如下图所示,使用%>%把左侧的程序的数据集A传递右侧程序的B函数,B函数的结果数据集再向右侧传递给C函数,最后完成数据计算。

例如:

  • f(x,y)等价于x %>% f(y)
  • g(f(x,y),z)等价于x %>% f(y) %>% g()
library(ggplot2)
library(dplyr)

cut_depth <- group_by(diamonds,cut,depth)
cut_depth <- summarise(cut_depth,n=n())
cut_depth <- filter(cut_depth,depth>55,depth<70)
cut_depth <- mutate(cut_depth,prop=n/sum(n))
cut_depth

# 使用%>%
cut_depth1 <- diamonds%>%
  group_by(cut,depth)%>%
  summarise(n=n())%>%
  filter(depth>55,depth<70)%>%
  mutate(prop=n/sum(n))
cut_depth1

# 另外一个例子
library(magrittr)

set.seed(123) #设置种子序列,保证结果可重复
n1<-rnorm(10000)        
n2<-abs(n1)*50        
n3<-matrix(n2,ncol = 100) 
n4<-round(rowMeans(n3))
hist(n4%%7)

# 使用 %>%
set.seed(123)
rnorm(10000) %>%
  abs %>% `*` (50)  %>%
  matrix(ncol=100)  %>%
  rowMeans %>% round %>% 
  `%%`(7) %>% hist

3、%T>%(向左操作符,tee operator)

功能和 %>% 基本是一样的,只不过它是把左边的值做为传递的值,而不是当前步计算得到的值。

现实原理如下图所示,使用%T>%把左侧的程序的数据集A传递右侧程序的B函数,B函数的结果数据集不再向右侧传递,而是把B左侧的A数据集再次向右传递给C函数,最后完成数据计算。

例子:

假设我们计算如下:

library(magrittr)

set.seed(123)
rnorm(10000) %>%
  abs %>% `*` (50)  %>%
  matrix(ncol=100)  %>%
  rowMeans %>% round %>% 
  `%%`(7) %>% hist %>% sum

提示报错。这是由于输出直方图后,返回值为空,那么再继续使用管道,就会把空值向右进行传递,这样计算最后一步时就会出错。这时我们需求的是,把除以7的余数向右传递给最后一步求和。

使用%T>%改成如下:

library(magrittr)

set.seed(123)
rnorm(10000) %>%
  abs %>% `*` (50)  %>%
  matrix(ncol=100)  %>%
  rowMeans %>% round %>% 
  `%%`(7) %T>% hist %>% sum

计算出结果。

4、 %$% (解释操作符,exposition pipe-operator)

%$%的作用是把左侧数据的属性名传给右侧,让右侧的调用函数直接通过名字,就可以获取左侧的数据。比如,我们获得一个data.frame类型的数据集,通过使用 ,在右侧的函数中可以直接使用列名操作数据。

现实原理如下图所示,使用%$%把左侧的程序的数据集A传递右侧程序的B函数,同时传递数据集A的属性名,作为B函数的内部变量方便对A数据集进行处理,最后完成数据计算。

例子:

下面定义一个10行3列的data.frame,列名分别为x,y,z,获取x列大于5的数据集。使用 %$% 把列名x直接传到右侧进行判断。这里.代表左侧的完整数据对象。一行代码就实现了需求,而且这里不需要显示的定义中间变量。

library(magrittr)

set.seed(123)
df<-data.frame(x=1:10,y=rnorm(10),z=letters[1:10])
df[df$x>5,]

# 使用%$%后
set.seed(123)
data.frame(x=1:10,y=rnorm(10),z=letters[1:10]) %$% .[x>5,]

5、%<>% (复合赋值操作符,compound assignment pipe-operator)

%<>%复合赋值操作符, 功能与 %>% 基本是一样的,多了一项额外的操作,就是把结果写回到最左侧的对象(覆盖原来的值)。比如,我们需要对一个数据集进行排序,那么需要获得排序的结果,用%<>%就是非常方便的。

现实原理如下图所示,使用%<>%把左侧的程序的数据集A传递右侧程序的B函数,B函数的结果数据集再向右侧传递给C函数,C函数结果的数据集再重新赋值给A,完成整个过程。

例子:

library(magrittr)

set.seed(123)
x<-rnorm(10)
x %>% abs %>% sort
x # 取完绝对值,排完序之后的结果并没有直接写到x里面去

# 使用%<>%
set.seed(123)
x<-rnorm(10)
x %<>% abs %>% sort
x # 但是如果使用%<>%操作符,你会发现取完绝对值,排完序之后的结果直接覆盖掉了原来的x。

6、符号:$

$符号用于提取数据框(data frame)或列表(list)中的成员。它允许访问数据框或列表中的某个列(成员),并返回该列的值。

例子:

df <- data.frame(name = c("Alice", "Bob", "Charlie"),
                 age = c(25, 30, 35))

df$name
df$age

注意:$符号只能用于数据框和列表类型的对象,不能用于向量和其他对象。

7、as.factor 或 factor函数作用

as.factor函数用于将一个变量转换为因子(factor)类型(强制转换),分组时用的较多。因子是R语言中用于表示分类变量的数据类型。当将一个变量转换为因子时,R会自动将变量的不同取值作为因子的水平(level),并将原始变量的值替换为对应水平的编码。可以使用as.factor()函数取代factor()函数。

例子:

gender <- c("男", "女", "男", "男", "女")

gender_factor <- as.factor(gender)
gender_factor

这里返回结果包括以下两个。

  • x向量,这是将转换为因子的向量。
  • levels:原x向量内元素的可能值。

可以使用参数levels强制设定分类数据的顺序:

gender <- c("男", "女", "男", "男", "女")

gender_factor <- factor(gender, levels=c("女", "男"))
gender_factor

如果有缺失的Levels值,也可以使用levels参数设置完整的Levels数据:

gender <- c("男", "女", "男", "男", "女")

gender_factor <- factor(gender, levels=c("女", "男", "中"))
gender_factor

将因子水平进行修改:

gender <- c("男", "女", "男", "男", "女")

gender_factor <- factor(gender, levels=c("女", "男", "中"), labels = c("1","2","3"))
gender_factor

注意:指定levels时,使用as.factor会报错。

8、aes 函数作用

aes函数是ggplot2包中的一个重要函数,用于创建美学映射(Aesthetic Mapping),即将数据的变量映射到图形的美学属性上。

aes函数的使用通常发生在ggplot()函数中的mapping参数中。它允许将数据的变量映射到图形的不同属性,如颜色、形状、大小、位置等。通过将美学属性与具体的数据列关联,可以创建丰富多样的图形效果,并在不同的图层中进行数据可视化。

# 映射函数,函数的最常见参数有两个
# x:x向量,将数据映射到本图层的x轴
# y:y向量,将数据映射到本图层的y轴
# …:其他向量,将数据映射到本图层的其他几何要素上

library(ggplot2)
aes(x, y, ...)

9、scale_colour_manual 函数作用

scale_colour_manual是ggplot2包中的一个函数,用于手动自定义颜色映射。它允许用户指定不同数据值对应的颜色,以及设置相应的标签和图例。

scale_colour_manual函数通常与ggplot函数中的aes函数和相关的图层函数(如geom_point、geom_line等)一起使用,用于自定义颜色映射。例如,使用以下代码可以创建一个散点图,并手动指定数据值1对应的颜色为红色,数据值2对应的颜色为蓝色。

library(ggplot2)

# 创建数据框
df <- data.frame(x = c(1, 2, 1, 2), y = c(1, 2, 2, 1), group = c(1, 1, 2, 2))

# 绘制散点图,并手动指定颜色映射
ggplot(data = df, mapping = aes(x = x, y = y, color = factor(group))) +
  geom_point() + # 绘制散点图
  scale_color_manual(values = c("red", "blue"))

上述代码首先创建了一个数据框df,其中包含了三个变量x、y和group。然后使用ggplot函数创建一个散点图,并使用aes函数将x映射到x轴,y映射到y轴,group映射到颜色属性。最后,使用geom_point函数绘制散点图,并使用scale_color_manual函数手动指定颜色映射,将group为1的数据值映射为红色,group为2的数据值映射为蓝色。

通过调整scale_color_manual函数中的values参数,可以指定更多数据值对应的颜色。

10、scale_fill_manual 函数作用

scale_fill_manual是ggplot2包中的一个函数,用于手动自定义填充颜色的映射。它允许用户指定不同数据值对应的填充颜色,以及设置相应的标签和图例。

scale_fill_manual函数通常与ggplot函数中的aes函数和相关的图层函数(如geom_bar、geom_area等)一起使用,用于自定义填充颜色映射。例如,使用以下代码可以创建一个柱状图,并手动指定不同类别的填充颜色。

library(ggplot2)

# 创建数据框
df <- data.frame(category = c("A", "B", "C", "D"),
                 value = c(10, 15, 20, 25))

# 创建柱状图,并手动指定填充颜色映射
ggplot(data = df, mapping = aes(x = category, y = value, fill = category)) +
  geom_col() +
  scale_fill_manual(values = c("red", "blue", "green", "yellow"))

上述代码首先创建了一个数据框df,其中包含了两个变量category和value。然后使用ggplot函数创建一个柱状图,并使用aes函数将category映射到x轴,value映射到y轴,以及作为柱子的填充颜色。最后,使用geom_col函数绘制柱状图,并使用scale_fill_manual函数手动指定填充颜色映射,将不同的category类别映射为不同的颜色。

通过调整scale_fill_manual函数中的values参数,可以指定更多数据值对应的填充颜色。

11、stat_ellipse 函数作用

stat_ellipse是ggplot2包中的一个统计变换函数,用于在散点图上添加椭圆。它可以根据给定的数据点的均值和协方差矩阵,绘制出椭圆来表示数据的分布情况,提供了对数据集的可视化描述。

stat_ellipse函数通常与geom_point函数一起使用,用于在散点图上显示椭圆。例如,使用以下代码可以创建一个带有椭圆的散点图。

library(ggplot2)

# 创建数据框
df <- data.frame(x = rnorm(100), y = rnorm(100))

# 绘制散点图,并添加椭圆
ggplot(data = df, mapping = aes(x = x, y = y)) +
  geom_point() +
  stat_ellipse()

上述代码首先创建了一个数据框df,其中包含了两个随机生成的变量x和y。然后使用ggplot函数创建一个散点图,并使用aes函数将x映射到x轴,y映射到y轴。最后,使用geom_point函数绘制散点图,并使用stat_ellipse函数添加椭圆。

stat_ellipse函数默认使用95%的置信区间绘制椭圆,即表示数据的大致范围。还可以通过调整参数来定制椭圆的样式,例如设置椭圆的颜色、填充、线条类型等。

完整例子:

## 设置种子
set.seed(20240208)

## R包加载
library(ggplot2)

## 数据构建(无意义)
data1<-data.frame(x=rnorm(500,mean = 15,sd=10),
                 y=rnorm(500,mean = 10,sd=10))
data2<-data.frame(x=rnorm(500,mean = 20,sd=10),
                  y=rnorm(500,mean = 15,sd=10))
data<-rbind(data1,data2)

## kmeans聚类
kmeans<-kmeans(data,2,nstart = 1000)
data$cluster<-as.factor(kmeans$cluster)

## 绘图
ggplot(data = data,aes(x=x,y=y,color=cluster))+
  geom_point(alpha=0.3)+
  stat_ellipse(aes(x=x,y=y,fill=cluster),geom = "polygon",level = 0.95,alpha=0.2)+
  scale_colour_manual(values = c("#00AFBB","#FC4E07"))+
  scale_fill_manual(values = c("#00AFBB","#FC4E07"))+
  theme_bw()->p1
print(p1)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/441675.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

excel统计分析——重复测量设计

参考资料&#xff1a;生物统计学 裂区设计中的裂区通常是指空间上的裂区&#xff0c;如果对试验指标进行连续测量时&#xff0c;时间也可以作为裂区因素。重复测量设计实际上就是时间裂区设计。进行试验结果的统计分析时&#xff0c;将试验因素作为主区&#xff0c;时间因素作为…

HTML—基本介绍

HTML是一种超文本标记语言(HyperText Markup Language)&#xff0c;用于创建网页的标记语言超文本&#xff1a;是指页面内可以包含图片、链接、声音、视频等内容标记&#xff1a;HTML富含大量的标签供程序员使用&#xff0c;通过标记符号来规定指定内容的样式 浏览器最终根据不…

问题解决 | vscode无法连接服务器而ssh和sftp可以

解决步骤 进入家目录删除.vscode-server rm -rf .vscode-server 然后再次用vscode连接服务器时&#xff0c;会重新安装&#xff0c;这时可能报出一些缺少依赖的错 需要联系管理员安装相关依赖&#xff0c;比如 sudo apt-get install libstdc6 至此问题解决

C.C语言初步认识

文章目录 一. 什么是C语言 二. 第一个C程序解读 三. 数据类型 四. 变量常量 4.1. 定义变量的方法 4.2. 变量的分类 4.3. 变量的使用 4.4. 变量的作用域和生命周期 4.5. 常量分类 五. 字符串 六. 转义字符 七. 注释 八. 选择语句 九. 循环语句 十. 函数 十一. 数…

ubuntu18.04编译OpenCV-3.4.19+OpenCV_contrib-3.4.19

首先确保安装了cmake工具 安装opencv依赖文件 sudo apt-get install build-essential sudo apt-get install git libgtk-3-dev pkg-config libavcodec-dev libavformat-dev libswscale-dev sudo apt-get install python3-dev python3-numpy libtbb2 libtbb-dev libjpeg-dev li…

机器学习——分类问题、logistic分类算法

之前我们学习的线性回归算法&#xff0c;适用于预测值y为连续值的情况下&#xff0c;但是在分类问题中&#xff0c;预测值y是个离散值&#xff0c;所以线性回归算法不适用。在这篇文章中&#xff0c;主要以二分类问题为例&#xff0c;介绍分类算法————logistic回归算法&…

Elasticsearch:什么是 DevOps?

DevOps 定义 DevOps 是一种现代软件开发方法&#xff0c;它将公司软件开发 (Dev) 和 IT 运营 (Ops) 团队的工作结合起来并实现自动化。 DevOps 提倡这样一种理念&#xff1a;这些传统上独立的团队在协作方面比在孤岛中更有效。 理想情况下&#xff0c;DevOps 团队共同努力改进…

【Web】浅聊Java反序列化之C3P0——不出网Hex字节码加载利用

目录 简介 原理分析 EXP 前文&#xff1a;【Web】浅聊Java反序列化之C3P0——URLClassLoader利用 简介 不出网的情况下&#xff0c;这个C3P0的Gadget可以和fastjson&#xff0c;Snake YAML , JYAML,Yamlbeans , Jackson,Blazeds,Red5, Castor等配合使用(调用setter和初始化…

基于卷积神经网络的野外可食用植物分类系统

温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长 QQ 名片 :) 1. 项目简介 本文详细探讨了一基于深度学习的可食用植物图像识别系统。采用TensorFlow和Keras框架&#xff0c;利用卷积神经网络&#xff08;CNN&#xff09;进行模型训练和预测&#xff0c;并引入迁移学习模型…

.NET开源的两款第三方登录整合库

前言 我相信做开发的同学应该都对接过各种各样的第三方平台的登录授权&#xff0c;来获取用户信息&#xff08;如&#xff1a;微信登录、支付宝登录、QQ登录、GitHub登录等等&#xff09;。今天大姚分享两款.NET开源的第三方登录整合库。 MrHuo.OAuth MrHuo.OAuth是.NET项目…

加密与安全_PGP、OpenPGP和GPG加密通信协议

文章目录 PGPOpenPGPGPG工作原理工作流程用途案例说明过程 代码实现pom依赖PgpEncryptionUtilPgpDecryptionUtilCommonUtilsPgpEncryptionTest 小结 PGP PGP (Pretty Good Privacy) 是一种加密通信协议&#xff0c;用于保护电子邮件和文件的安全性和隐私。它通过使用加密、数字…

flink实战--Flink任务资源自动化优化

背景 在生产环境Flink任务资源是用户在实时平台端进行配置,用户本身对于实时任务具体配置多少资源经验较少,所以存在用户资源配置较多,但实际使用不到的情形。比如一个 Flink 任务实际上 4 个并发能够满足业务处理需求,结果用户配置了 16 个并发,这种情况会导致实时计算资…

打开stable diffusion webui时,提示缺少clip或clip安装不上怎么办

在当前数字化时代&#xff0c;软件工具的应用已经成为人们日常生活和工作中不可或缺的一部分。而在使用各种软件工具的过程中&#xff0c;遇到一些技术性问题也是常有的事情。比如&#xff0c;在打开 Stable Diffusion WebUI 这样一个功能强大的工具时&#xff0c;有时会遇到缺…

VMware虚拟机安装Centos7图解,提供软件包镜像(详细安装,小白入门必看)

目录 1. 安装vmware软件 2. 下载centos7镜像 3. 使用镜像安装centos操作系统 3.1 创建新的虚拟机 3.2 开机安装系统 4. 尝试网络连通性 5. 配置静态ip地址 1. 安装vmware软件 下载链接&#xff08;包含激活码&#xff09;&#xff1a;VMware https://www.alipan…

Yolov8模型用torch_pruning剪枝

目录 &#x1f680;&#x1f680;&#x1f680;订阅专栏&#xff0c;更新及时查看不迷路&#x1f680;&#x1f680;&#x1f680; 原理 遍历所有分组 高级剪枝器 &#x1f680;&#x1f680;&#x1f680;订阅专栏&#xff0c;更新及时查看不迷路&#x1f680;&#x1f680…

C# winform 重启电脑

一、重启电脑指令 windows7系统的启动文件夹为“开始菜单”——“所有程序”里面就有“启动”文件夹&#xff0c;其位置是 “C:\Users\Administrator\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup” 如果没有&#xff0c;则需要将其中的"administrator…

flutter逆向 ACTF native ap

言 算了一下好长时间没打过CTF了,前两天看到ACTF逆向有道flutter逆向题就过来玩玩啦,花了一个下午做完了.说来也巧,我给DASCTF十月赛出的逆向题其中一道也是flutter,不过那题我难度降的相当之低啦,不知道有多少人做出来了呢~ 还原函数名 flutter逆向的一大难点就是不知道lib…

容器安全是什么?

容器安全定义 容器安全是指保护容器的完整性。这包括从其保管的应用到其所依赖的基础架构等全部内容。容器安全需要完整且持续。通常而言&#xff0c;企业拥有持续的容器安全涵盖两方面&#xff1a; 保护容器流水线和应用保护容器部署环境和基础架构 如何将安全内置于容器流…

【MySQL 系列】MySQL 语句篇_DQL 语句

DQL&#xff08;Data Query Language&#xff09;&#xff0c;即数据查询语言&#xff0c;用来查询数据记录。DQL 基本结构由 SELECT FROM、WHERE、JOIN 等子句构成。 DQL 语句并不会改变数据库&#xff0c;而是让数据库将查询结果发送结果集给客户端&#xff0c;返回的结果是一…

代理IP以及动态拨号VPS的关系是什么?

在数字时代&#xff0c;网络安全和隐私保护已成为全球关注的热点话题。代理IP和动态拨号VPS作为提升网络匿名性和安全的重要技术&#xff0c;它们在维护网络隐私中扮演着至关重要的角色。虽然这两种技术在表面上看似相似&#xff0c;实际上它们在功能、应用场景以及用户需求满足…