首页
学习
活动
专区
圈层
工具
发布

R语言中 apply 函数详解

tapply mapply 设置上下文 我将首先通过使用简单的数据集介绍上面的每个函数是如何工作的,然后我们将使用一个真实的数据集来使用这些函数。...mapply函数最好用例子来解释——所以让我们先使用它,然后再尝试理解它是如何工作的。 首先,让我们看一个通常不以2个列表或2个向量作为参数的函数,例如max函数。...因此,在处理数据帧时,mapply是一个非常方便的函数。 现在,让我们看看如何在实际数据集上使用这些函数。...我们还可以使用mapply()函数创建一个显示花瓣长度和花瓣宽度之和的新列: iris_df['Sum_Petal'] mapply(function(x, y) x+y, iris_df$Petal.Length...尾注 到目前为止,我们学习了R中apply()函数族中的各种函数。这些函数集提供了在一瞬间对数据应用各种操作的极其有效的方法。本文介绍了这些函数的基础知识,目的是让你了解这些函数是如何工作的。

21.9K40
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    R语言中的apply函数族

    X: 是一个数组(array),也就是说输入必须都是相同类型的数据,要么都是数值型,要么都是字符型。如果是一个混合数据类型的data.frame,那么就会尝试用as.matrix强制转换数据。...mapply函数 mapply是sapply的变形函数,类似多变量的sapply,但是参数定义有些变化。第一参数为自定义的FUN函数,第二个参数’…’可以接收多个数据,作为FUN函数的参数调用。...例如,计算不同品种的鸢尾花的花瓣(iris)长度的均值。...,它只处理list类型数据,对list的每个元素进行递归遍历,如果list包括子元素则继续遍历。...总结 从上面这8个函数的参数定义,我们可以发现它们都接收一个函数作为它的参数,在编程的世界里,这种把函数作为参数传入的函数称为高阶函数,函数式编程就是指这种高度抽象的编程范式。

    5.1K52

    R语言中的批处理函数

    apply族函数分别有apply函数,tapply函数,lapply函数,mapply函数。每一个函数都有自己的特点,在处理不同类型的数据可以选用相对应的函数。...apply族函数分别有apply函数,tapply函数,lapply函数,mapply函数。每一个函数都有自己的特点,在处理不同类型的数据可以选用相对应的函数。...1.apply函数 apply函数只能用于处理矩阵类型的数据,也就是说所有的数据必须是同一类型。因此要使用apply函数的话,需要将数据类型转换成矩阵类型。...3.tapply函数 它通常会有三个参数,第一个参数代表数据,第二个参数表示如何对数据进行分组操作,第三个参数指定每一个分组内应用什么函数。...也就是说tapply函数就是把数据按照一定方式分成不同的组,再在每一组数据内进行某种运算。 ? 4.mapply函数 mapply函数主要是对多个列表或者向量参数使用函数. ?

    3.2K20

    R语言实现基因序列的匹配和比对

    我们对字符串都很熟悉,那么面对大量的测序序列字符串,我们如何对其进行处理分析,获得最终的结果。在R语言中有学者专门针对字符串的处理开发了对应的包,命名为Biostrings。...和rndSeq函数获取5条序列(字符串): DNA.raw mapply(rndSeq,list(DNA_BASES), rep(20, 5)) names(DNA.raw) 使用不同类型的字符串。不过我们只被允许使用XString的一些子类: BString, DNAString, RNAString,和AAString.。...另外也可以利用另一个函数subseq(),其可以更加方便的构造任意长度的Xstrings。 subseq(bstring, start=1, end=3) ?...6. letterFrequencyInSlidingView() 函数主要是获取在指定长度序列中各字符的频率,并且将此指定长度作为窗口进行下移一个碱基,直至计算整个序列。

    8.1K40

    128-R茶话会21-R读取及处理大数据

    前言 最近要处理一个100K*1M 左右大小的矩阵,这个矩阵的行为病人记录,列则是每个突变位点的突变信息,记录为0,1,2。 这个矩阵单纯大小就有300多G,我该如何去读取它、处理它呢?...1-如何读取它 首先。毫无疑问的指向data.table 包中的fread。 它有两个优点: 效率飞速,自带多线程操作; data.table 格式很好地节约内存。...通过设置循环,每次固定读取一定行数的文件,并设置循环退出条件为读取结果为零即可: while( TRUE ){ # read genotype tmp <- readLines(genotype.file.../Input/split/xx_raw_ # -l 设置拆分文件的行数 # -a 用于设置后缀长度,后缀使用字母a-z # -a 2 则后缀为 aa,ab,ac ...ba,bb ... zz 使用脚本同时处理若干个文件即可...2-优化处理过程 首先,我的矩阵是从数据框得到的,而它们读入时被定义为了字符串型,我需要对他们使用转型。 使用apply?来点多线程,mapply? no,no,no。

    68120

    R语言 apply函数家族详解

    .3" "b...4" "b...5" $c [1] "c...1" "c...2" "c...3" "c...4" "c...5" vapply {base} vapply类似于sapply函数,但是它的返回值有预定义类型...,所以它使用起来会更加安全,有的时候会更快 在vapply函数中总是会进行简化,vapply会检测FUN的所有值是否与FUN.VALUE兼容,以使他们具有相同的长度和类型。...1, 但FUN(X[[1]])结果的长度却是2 > vapply(x,k,c(c=0,b=0)) 错误于vapply(x, k, c(c = 0, b = 0)) : 值的种类必需是'double',...{base} mapply是sapply的多变量版本。...,可以减少结果成为一个向量、矩阵或者更高维阵列,详见sapply的simplify参数 USE.NAMES 逻辑值,如果第一个参数...已被命名,将使用这个字符向量作为名字 例: > mapply(rep

    2K100

    R数据分析大数据当中的化整为零(Split-Apply-Combine)策略

    什么时候我们需要使用到化整为零的策略呢?有以下三种情况: 数据需要分组处理 数据需要按照每行或者每列来处理 数据需要分级处理,和分组很类似,但是分级时需要考虑分级之间的关系。...最直观的过程是使用Loop循环。这里使用一个例子来讲解一下如何实现化整为零策略。在plyr包中有数据ozone,它是一个三维矩阵(24X24X72),其中最后一维72是指的6年12个月每个月的结果。...., USE.NAMES = TRUE) 我们看到,它没有了apply当中所需要的第二个参数margin,其原因就是输入对象不是array或者matrix,而是list或者Vector。...,无论你传入的x是什么,它首先做的一步说是使用as.list来将其转换成一个一维的list。...从上面的比较中,我们很清楚的看到,sapply返回值的排列形式,以list的names为colnames。可以想象,它使用的是按列填充matrix的方式输出的。

    1.5K80

    谷歌自锤Attention is all you need:纯注意力并没那么有用,Transformer组件很重要

    问题来了:如果 Transformer 的自注意力机制不给力,又是什么赋予了它优秀的能力呢?...研究者通过证明在类 Transformer 的 SAN 架构变体上的收敛行为的上下界,描述了这些反作用力。研究结果揭示了跳过连接此前不为人知的重要作用,它的作用可不只是促进优化和梯度流动。...尽管 MLP 在缓解收敛方面似乎没太大帮助,但研究者注意到这一观察未必准确反映 Transformer 的运作原理:移除跳过连接会导致 MLP 输入出现极大的分布偏移。...该研究对具备跳过连接的 SAN 进行的分析表明,路径有效性会随着路径长度的增加而降低,即使涉及的非线性运算数量增加了。为了验证这一假设,研究者将不同长度的路径分隔开,并评估其预测能力。...2021 AI 100 Connect Webinar:AI+大消费专场 3月18日,科百科技产品方案部总监孙祥明、云拿科技智慧零售产品负责人李宛书将分别以「信物融合,让天下没有难种的作物」、「智慧零售

    50510

    【Netty】「优化进阶」(二)浅谈 LengthFieldBasedFrameDecoder:如何实现可靠的消息分割?

    它能根据指定的长度字段解析数据帧,将输入的字节流分割成一系列固定大小的帧 Frames,并且每个帧的大小可以根据帧头信息中指定的长度进行动态调整。...在解码过程中,解码器会读取指定位置的长度域,并计算出数据包的实际大小,然后从输入流中截取相应长度的字节作为一个完整的数据包进行处理。...initialBytesToStrip:解码器在返回帧之前应该跳过的字节数。例如,如果帧包含了长度字段本身的字节,那么这些字节就需要被跳过。...2,长度字段的值为12(0x0C),它表示 HELLO, WORLD 的长度。...后记 总之,通过本文对 LengthFieldBasedFrameDecoder 的深入解析,我们了解了它的工作原理以及如何实现可靠的消息分割。

    1.1K10

    双指针技巧秒杀四道数组链表题目

    本文主要使用 双指针技巧 中的快慢指针技巧,也可以避免直接删除数组中的元素,降低算法的复杂度。 下面直接看 4 道力扣题目。...但是原地删除,不允许我们 new 新数组,只能在原数组上操作,然后返回一个长度,这样就可以通过返回的长度和原始数组得到我们去重后的元素有哪些了。...我们让慢指针slow走在后面,快指针fast走在前面探路,找到一个不重复的元素就告诉slow并让slow前进一步。...,依然需要使用 双指针技巧 中的快慢指针: 如果fast遇到需要去除的元素,则直接跳过,否则就告诉slow指针,并让slow前进一步。...移动零 这是力扣第 283 题,我来描述下题目: 给你输入一个数组nums,请你原地修改,将数组中的所有值为 0 的元素移到数组末尾,函数签名如下: void moveZeroes(int[] nums

    34110

    剑指Offer题解 - Day36

    「示例 1:」 输入: [1,2,3,4,5] 输出: True 「限制:」 数组长度为 5 数组的数取值为 [0, 13] 思路: 根据题目要求,我们需要判断长度为5的数组是否是有序的。...复杂度方面,由于数组长度只有 5,所以时间复杂度和空间复杂度都是O(1) 。 排序 本题除了使用集合来判重以外,还可以先排序再判断元素是否重复。...如果当前元素为 0,对非零索引累加,然后跳过当前循环,进入下个循环。如果当前元素不是零,且与下个元素相同,意味着存在重复元素,则直接返回false 。...可以这样判重的前提是数组有序,否则不能直接让当前元素和下一个元素进行判断。 最后取数组最后一个元素和第一个不是0的元素,两者相减,如果值小于5则为顺子。...总结 本题分析了两个解法,使用集合判重,不论数组是否有序都可以。而第二种办法就要确保数组是有序的,才可以通过相邻元素判断是否元素重复。

    30010

    【LeetCode:27 移除元素】双指针快速掌握移除题 (附五道题)

    思路: 快指针负责 “筛选” 有效元素(不等于 val 的元素),慢指针负责 “记录” 有效元素的位置。当快指针找到有效元素时,就把它 “搬运” 到慢指针的位置,然后慢指针前进一格。...;[0, left) 为有效区间 } 示例(快慢指针): 当寻找到需要移除的元素时,慢指针不动,即让快指针跳过该元素,达到后面的元素统一往前移一格(覆盖) class Solution {...用户评测: 评测机将使用以下代码测试您的解决方案: int[] nums = [...]; // 输入数组 int val = ...; // 要移除的值 int[] expectedNums = [....判题标准: 系统会用下面的代码来测试你的题解: int[] nums = [...]; // 输入数组 int[] expectedNums = [...]; // 长度正确的期望答案 int k =...示例 1: 输入:nums = [1,1,2] 输出:2, nums = [1,2,_] 解释:函数应该返回新的长度 2 ,并且原数组 nums 的前两个元素被修改为 1, 2 。

    16110

    Leetcode 跳跃游戏

    题目描述 (难度中等) 给定一个非负整数数组 nums ,你最初位于数组的 第一个下标 。数组中的每个元素代表你在该位置可以跳跃的最大长度。判断你是否能够到达最后一个下标。...示例 1: 输入:nums = [2,3,1,1,4] 输出:true 解释:可以先跳 1 步,从下标 0 到达下标 1, 然后再从下标 1 跳 3 步到达最后一个下标。...示例 2: 输入:nums = [3,2,1,0,4] 输出:false 解释:无论怎样,总会到达下标为 3 的位置。但该下标的最大跳跃长度是 0 , 所以永远不可能到达最后一个下标。...解题思路 能否到达最后一个下标,需要判断数组是否存在零。 如果不存在零,则一定能到达最后一个下标。 如果存在零,则看零前面的位置能不能跳过零,如果不能跳过,返回false。...为零需要判断前面的位置能不能跳过零的位置。 零前面的能不能跳过有两种方法 往前遍历,看前面能不能跳过零的位置 记录前面能跳最远的下标,判断跳的最远的位置是否大于零的位置

    44420

    第2讲:C语言数据类型和变量

    sizeof中如果放的是表达式,表达式不会真实计算。那如果不真实计算,我们如何知道表达式sizeof(s = b + 1)的长度是多少呢? ...scanf ( "%d" , &i); 它的第一个参数是一个格式字符串,里面会放置占位符(与 printf() 的占位符基本一致),告诉编 译器如何解读用户的输入,需要提取的数据是什么类型...假设这里输入个10,20之后,不想让它再读了,按三次ctrl z,也会停下来。正常的情况下按一次就可以了,但是在vs上,这个里面可能有bug。 一个都没读到。...如果要强制跳过字符前的空白字符,可以写成 scanf(" %c", &ch) ,即 %c 前加上⼀个空格,表示跳过零个或多个空白字符。...如果是%d的这种输入方式,它会把前面的空格全部都跳过去,然后读100。 下面要特别说一下占位符 %s ,它其实不能简单地等同于字符串。

    65510

    如何运用深度学习自动生成音乐

    下面详细讨论一下如何使用这两种方法来训练模型。 Wavenet: 训练阶段 这是一个多对一的问题,输入是一系列振幅值,输出是随后的值。 让我们看看如何准备输入和输出序列。...当我们设置填充有效时,输入和输出序列的长度会变化。...输出的长度小于输入: 当我们将padding设置为相同时,将在输入序列的任一侧填充零,以使输入和输出的长度相等: 一维卷积的优点: 捕获输入序列中的顺序信息 与GRU或LSTM相比,由于缺乏反复的联系...因此,它违反了自回归原理。 当padding设置为有效时,输入和输出序列的长度会变化,这是计算剩余连接所需的(稍后将介绍)。 这为因果卷积扫清了道路。...LSTM的缺点: 由于它按顺序处理输入,因此需要花费大量时间进行培训。 使用Python自动生成音乐 等待结束了!让我们开发一个自动生成音乐的端到端模型。

    2.8K00

    Transformer的潜在竞争对手QRNN论文解读,训练更快的RNN

    CNN使用内核(或过滤器)通过滑动窗口捕获要素之间的对应关系。这克服了固定长度的隐藏表示形式(以及由此带来的长期依赖问题)以及RNN缺乏并行性限制的问题。...也就是说,输入序列的左边是“ kernel_size-1”零。因此,只有'sequence_length-kernel_size + 1'过去的标记可以预测给定的标记。...为了更好理解,请参考下图: 接下来,我们基于池化功能(将在下一节中讨论)使用额外的内核库,以获取类似于LSTM的门控向量: 这里,*是卷积运算;Z是上面讨论的输出(称为“输入门”输出);F是使用额外的内核库...,这与在后续层上具有跳过连接的惯例相反。...我们看到了它如何在基于卷积的模型中增加递归,从而加快了序列建模的速度。QRNN的速度和性能也许真的可以替代Transformer。 编辑:王菁 校对:林亦霖

    1.4K31

    复写零

    复写零[1] 描述 给你一个长度固定的整数数组 arr,请你将该数组中出现的每个零都复写一遍,并将其余的元素向右平移。 注意:请不要在超过该数组长度的位置写入元素。...要求:请对输入的数组 就地 进行上述修改,不要从函数返回任何东西。...示例 1: 输入:[1,0,2,3,0,4,5,0] 输出:null 解释:调用函数后,输入的数组将被修改为:[1,0,0,2,3,0,0,4] 示例 2: 输入:[1,2,3] 输出:null 解释:...调用函数后,输入的数组将被修改为:[1,2,3] 解题思路 遍历数组,对元素进行判断是否为 0; 若为 0,将当前索引位置后的元素整体向后移,超出数组长度的直接舍弃; 同时将当前索引位的后一位复写为 0...,在遇见 0 之后,将后边的元素整体向后移,超出数组长度的直接舍弃,同时将当前索引位置的后一位置为 0 for (int i = 0; i < arr.length - 1; i++)

    48840

    printf 和 scanf 并没有这么简单

    程序运行到这个语句的时候,会停下来,等待用户从键盘输入。用户输入数据,按下回车键后,scanf()就会处理用户的输入,将其存入变量。它的原型定义在头文件 stdio.h 。...当我们有了变量,我们需要给变量输入值的时候就可以使用 scanf 函数,如果需要将变量的值输出到屏幕上的时候可以使用 printf 函数,下面看一个例子: 我们在用scanf()函数的时候...它的第一个参数是一个格式字符串,里面会放置占位符(与printf()的占位符基本一致),告诉编译器如何解读用户的输入,需要提取的数据是什么类型。...如果要强制跳过字符前的空白字符,可以写成 scanf(“ %c”,&ch),即 %c 前加上一个空格,表示跳过零个或多个空白字符。...为防止这种情况,使用 %s 占位符时,应该指定读入字符串的最长长度,即写成 %[m]s ,其中的[m]是一个整数,表示读取字符串的最大长度,后面的字符将被丢弃。

    94910
    领券