小工具知识网

当前位置: 首页 > 行业知识 > R语言基础的代码语法解译笔记

行业知识

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

2026-11-12 21:33:52 来源:互联网转载

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 55,depth%  mutate(prop=n/sum(n))cut_depth1# 另外一个例子library(magrittr)set.seed(123) #设置种子序列,保证结果可重复n1%  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)df5,]# 使用%$%后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% abs %>% sortx # 取完绝对值,排完序之后的结果并没有直接写到x里面去# 使用%%set.seed(123)x% sortx # 但是如果使用%%操作符,你会发现取完绝对值,排完序之后的结果直接覆盖掉了原来的x。

    6、符号:$

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

    例子:

    df 

上一篇:揭秘Linux提权秘籍,系统权限提升实战指南

下一篇:大哥服务器暂停怎么回事?