直接写和放在函数中不同的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包。

  • sym把一个R字符串对象转换为一个symbol。
  • (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 % 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

    郑重声明:本文内容及图片均整理自互联网,不代表本站立场,版权归原作者所有,如有侵权请联系管理员(admin#wlmqw.com)删除。
    (0)
    用户投稿
    上一篇 2022年6月15日
    下一篇 2022年6月15日

    相关推荐

    • 请闭嘴吧,针对新能源车自燃事件

      该让你们闭嘴了!最近很多人拿新能源车自燃来说事,那我来给你们科普一下。不要再针对某迪某特了! 先给结论:与传统燃油车起火事故发生率相比,新能源汽车起火率较低! 论据1:各个车企在电…

      2022年6月12日
    • LPL官方,就数据造假事件正式致歉:考虑不周,将修改入围标准

      北京时间8月2号傍晚时分,LPL官博发文,就此前被闹得沸沸扬扬的“JKL各项数据第一,数据却故意造假”事件正式道歉。官博的原文如下:“在最近一周的“本周最‘加’回顾”发布后,我们关…

      2022年8月3日
    • 不到300元能买什么样的智能手环,看看手表一样的OPPO手环2吧

      8月中旬,离开学的日子不远了,之前儿子一直在用小米手环,最近被他弄坏了。于是只能给他买新的,正好看到了新发布的OPPO手环2,一看价格不到300,就给他买了一个。 一、开箱 产品包…

      2022年8月17日
    • 抖音主页访客关闭后别人能看到吗 看了对方之后再关掉访客

      在抖音,大家经常会观看别人的视频,那么有些小伙伴们可能就会开通和访客记录,这个访客记录其实是比较暴露隐私的,一些小伙伴们都不想继续开通,抖音访客记录可以删除吗? 一、抖音访客记录可…

      2022年10月27日
    • 梨形女生的夏季万能穿搭公式,照着穿就能瘦瘦瘦

      夏天,真是一个让人又爱又恨的季节 爱它的色彩斑斓、花红柳绿也恨它的暴热酷暑、潮湿闷热 爱它在这个季节可以独享橘子汽水、冰镇西瓜、沙滩和芳草地。 恨它在这个季节不那么的穿衣自由、任意…

      2022年6月26日
    • 科学家们正在使用卫星追踪漂洋过海的垃圾河流

      在地球的海洋中漂浮着大量的人造垃圾。从塑料吸管到饮料瓶和食品包装纸,海洋是这个星球上增长最快的垃圾场。一些塑料被磨成小颗粒,最终进入食物链,而人类在食物链的顶端。由于这个原因,以及…

      2022年8月18日
    • 肢体语言专家分析凯特王妃微表情:揭露一个最真实的凯特王妃

      在当今英国王室众多的王室成员之中,如果说有哪一位王室成员在人们心中的个人形象最好、最受人喜爱,那么这位王室成员非凯特王妃莫属。 凯特王妃的全名是凯特·米德尔顿(Kate Middl…

      2022年7月23日
    • 零时科技 || DPC攻击复现

      背景 北京时间2022年9月10日,DPC代币合约遭到黑客攻击,损失超73,614 BUSD, 零时科技安全团队及时对此安全事件进行分析,详情可移步至分析文章“零时科技 || DP…

      2022年10月18日
    • 现在大数据时代,医生必须持证行医,还存在民间医生和祖传秘方吗?

      任何時候都會存在,只不過會越來越少,隨著監管越來越嚴格,大多數無力考證的都會金盆洗手,沒人願意為那幾毛錢觸那眉頭。 “民间医生”、“祖传秘方”就是自己顾弄玄虚,是自己招摇撞骗的幌子…

      2022年6月30日
    • lombok 插件使用时遇到的第2个坑

      为了更简洁的构造bean对象,使用注解@Builder,然而发现,通过builder生成的bean对象,字段默认值没了(备注:日常开发中,bean 的成员变量尽量使用封装对象,以及…

      2022年6月12日

    联系我们

    联系邮箱:admin#wlmqw.com
    工作时间:周一至周五,10:30-18:30,节假日休息