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

news2024/11/17 9:25:40

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 函数作用

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

例子:

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

gender_factor <- as.factor(gender)
gender_factor

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

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

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%的置信区间绘制椭圆,即表示数据的大致范围。还可以通过调整参数来定制椭圆的样式,例如设置椭圆的颜色、填充、线条类型等。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

怎么把amv格式转换成MP4? 几个步骤轻松搞定~

AMV文件格式的起源可以追溯到中国公司Actions Semiconductor&#xff0c;最初作为其MP4播放器的专有视频格式。在数码媒体领域蓬勃发展的时期&#xff0c;AMV格式因其小巧、高度压缩的特性而备受青睐&#xff0c;为便携设备提供了一种有效的视频存储解决方案。 MP4文件格式的特…

游泳池泵/过滤器/氯化器/潜水泵上架美国亚马逊UL1081测试

Ul是美国保险商试验所&#xff08;UnderwritersLaboratoriesInc.&#xff09;的简写。UL安全试验所是美国最有权威的&#xff0c;也是世界上从事安全试验和鉴定的较大的民间机构。它是一个独立的、营利的、为公共安全做试验的专业机构。它采用科学的测试方法来研究确定各种材料…

泛微OA服务器获取 token

泛微OA服务器获取 token 文章目录 泛微OA服务器获取 token一、泛微官方方法1 ecology 系统配置2 发放/生成许可证(appid)3 限制许可证使用ip地址&#xff08;该步骤也可以跳过&#xff09;4 使用 postman 注册5 获取 token6 访问业务系统接口 二、java 代码获取 token三、封装到…

【随笔记】小程序轮播图,一屏显示三个swiper-item

常见的轮播是一屏显示一个swiper-item,有的时候需要一屏显示三个swiper-item,左右两边都显示出一点 【目前小程序基础库2.12.3 效果正常,3.几的效果会有点不正常】 效果图 wxml <!-- 轮播begin --> <swiper wx:if="{{up_down}}" class="card-swipe…

GO: 快速升级Go版本

由于底层依赖升级了&#xff0c;那我们也要跟着升&#xff0c;go老版本已经不足满足需求了&#xff0c;必须要将版本升级到1.22.0以上 查看当前Go版本 命令查看go版本 go version[rootlocalhost local]# go version go version go1.21.4 linux/amd64 [rootlocalhost local]# …

3/7作业

信号同步 #include <stdio.h> #include <string.h> #include <unistd.h> #include <stdlib.h> #include <sys/types.h> #include <sys/stat.h> #include <fcntl.h> #include <pthread.h> #include <semaphore.h> sem_t…

Windows系统安装Jupyter Notebook并实现公网访问内网笔记服务

文章目录 1.前言2.Jupyter Notebook的安装2.1 Jupyter Notebook下载安装2.2 Jupyter Notebook的配置2.3 Cpolar下载安装 3.Cpolar端口设置3.1 Cpolar云端设置3.2.Cpolar本地设置 4.公网访问测试5.结语 1.前言 在数据分析工作中&#xff0c;使用最多的无疑就是各种函数、图表、…

java操作内存,简单讲解varhandle的使用

概述&#xff1a;按理说jdk8的unsafe类就够用了&#xff0c;估计是因为不安全的原因&#xff0c;到jdk9出了个varhandle类&#xff0c;到jdk21的时候出了Arena和MemorySegment,基本就可以取代unsafe类的使用了。这里我主要讲varhandle类&#xff0c;因为大部分人升级jdk顶多升到…

Excel小技巧-筛选带删除线的数据并删除

Excel小技巧-筛选带删除线的数据并删除 1、替换删除线2、筛选空行并删除 今天同事使用 Excel 的时候遇到一个需求&#xff0c;有些内容不在需要时会被标记删除线&#xff0c;后面再删除&#xff0c;但是由于数据比较多&#xff0c;不方便一个个删除&#xff0c;有没有什么办法能…

STM32 通过Modbus协议更改内部Flash(模仿EEPROM)的运行参数

main.c测试 uint8_t uart1RxBuf[64]{0};uint8_t Adc1ConvEnd0; uint8_t Adc2ConvEnd0;int main(void) {/* USER CODE BEGIN 1 *//* USER CODE END 1 *//* MCU Configuration--------------------------------------------------------*//* Reset of all peripherals, Initial…

使用腾讯云快速搭建WordPress网站流程详解

专栏系列文章&#xff1a; WordPress建站主题美化系列教程https://blog.csdn.net/seeker1994/category_12184577.html 一文搞懂WordPress是什么&#xff1f;为什么用它建站&#xff1f;怎么安装与部署&#xff1f; 初次安装WordPress后如何进行网站设置&#xff08;主题安装、…

阿里云k8s环境下,因slb限额导致的发布事故

一、背景 阿里云k8s容器&#xff0c;在发布java应用程序的时候&#xff0c;客户端访问出现500错误。 后端服务是健康且可用的&#xff0c;网关层大量500错误请求&#xff0c;slb没有流入和流出流量。 经过回滚&#xff0c;仍未能解决错误。可谓是一次血的教训&#xff0c;特…

数组与指针之二——二级指针之一

定义是这样&#xff1a; 多级指针&#xff08;二级指针&#xff09;&#xff0c;C语言多级指针的用法详解 (biancheng.net) 这是针对变量&#xff0c;且是一级一级的取的。但是我们经常要面对数组&#xff0c;用到二级指针。如前面第一篇所述&#xff0c;对一维数组名取地址&…

折扣价和折扣实时转换

背景 : react 项目 问题 : 在折扣数中输入折扣2.333333&#xff0c;中间会多很多0&#xff0c;输入2.222&#xff0c;不能正常输入到第三位 如下图 原因 : oFixed()数字转字符串时可能会导致精度问题 解决思路 : parseFloat来解析浮点数原代码 const calculateDiscountVal (p…

学习Java的第四天

目录 一、if选择结构 1、基本if选择结构 语法结构&#xff1a; 流程图&#xff1a; 示例&#xff1a; 2、if-else 选择结构 语法结构&#xff1a; 流程图&#xff1a; 示例&#xff1a; 3、多重if选择结构 语法结构&#xff1a; 流程图&#xff1a; 示例&#xff1a…

如何让JMeter也生成精美详细allure测试报告

&#xff08;全文约2000字&#xff0c;阅读约需5分钟&#xff0c;首发于公众号&#xff1a;测试开发研习社&#xff0c;欢迎关注&#xff09; 内容目录&#xff1a; 一、需求 二、思路 三、验证 四、实现 五、优化 六、彩蛋 篇幅较长&#xff0c;建议先收藏后阅读 一、需…

Java项目:42 ssm的高校专业信息管理系统设计与实现001

作者主页&#xff1a;舒克日记 简介&#xff1a;Java领域优质创作者、Java项目、学习资料、技术互助 文中获取源码 项目介绍 系统可以提供信息显示和相应服务 管理员查看学生报名专业&#xff0c;管理专业&#xff0c;课程以及学生&#xff0c;查看学生提问并回答问题&#x…

飞驰云联CEO朱旭光荣获“科技领军人才”称号

2024年2月29日&#xff0c;苏州工业园区“优化营商环境暨作风效能建设大会”成功举办&#xff0c;会上公布了2023年度苏州工业园区第十七届第一批金鸡湖科技领军人才名单&#xff0c;Ftrans飞驰云联创始人兼CEO朱旭光先生凭借在数据安全以及文件交换领域取得的突出成果&#xf…

浅谈高并发的一些解决思路

前言 《中国互联网发展状况统计报告》指出&#xff0c;截至2020年6月&#xff0c;我国网民规模已经达到9.40亿&#xff0c;较2020年3月年增长3625万&#xff0c;除了如此庞大的用户基数&#xff0c;如今人们接入互联网的方式也越来越多样&#xff0c;小到智能手表&#xff0c;…