Loop functions
循环是R语言中最强大的函数之一。循环函数背后的思路是,当你想要对一个或一组对象执行循环的时候,使用这种方式可以让你在在很少的空间内执行大量的重复工作,不必向命令行那样做很多输入。
之前我们学习过循环和循环,除了这些之外还有很多更加简洁的循环函数,他们通常名字里都带着这个词,主要包含:
是最最主力的函数。他的主要用途是,对列表(list)对象而言,你想在其内部做一个循环,并对列表中的每一个元素运用函数
是的一个变体,简化了的结果
是一个对数组进行行或列运算的函数。如果你想对矩阵或其他高维数组求和,这个函数会非常好用。
是的缩写,将函数应用于向量的子集。
是的多变量版本。
除了这些之外,还有一个函数叫做,它不对对象进行任何操作,但是常常和、等结合使用,可以将对象分成子块。
下面先认识一下最常用的函数
有三个参数:第一个是输入对象,即名叫x的列表;第二个是一个函数名;其余的参数可以传递给参数。函数是这样的:
如果x不是列表,可能会被强制转化成列表,如果没有强制转化就会报错。对于来说,重点要记住的就是他的对象是列表。
PS. 常用来给列表中的每个元素做运算的函数传递参数
举例子:
创建一个列表x,包含两个元素,a是1-5数列,b是10以内的随机数字组成的向量。使用函数来计算平均值,生成结果输入新列表y中:
新生成的列表y的元素,和原列表x有相同的名字,即a和b,在新列表y中显示出了计算的平均值。
再举个栗子:
创建一个序列赋值给x,然后使用随机数发生器生成符合均匀分布的随机变量。函数的第一个参数就是你要产生随机数字的个数,这个个数就是从x来的,即1-4。
使用函数就会自动将生成的随机数字返回得到一个列表:
上面两个例子中,都只填了和两个参数,没有设置,都为的默认值。如果要设置的话,填在后面就好:
例如,上面的函数,默认是在0-1之间取值,如果修改区间,改成5-10,可以通过传递参数,作如下修改:
和相关函数充分利用了所谓的匿名函数,匿名函数没有函数名,所以我们不用给他们分配函数名,可以直接创建函数
这个例子中,我们创建了一个包含两个矩阵a、b的列表:
我现在想提取每个矩阵的第一列,结果发现没这个函数。
那么就来创造一个函数提取矩阵的第一列:
在我临时创造的函数里面,命名了一个参数叫,用于提取第一行,其实你想叫他什么都可以因为出了之后他就毫无意义了。
所以使用的时候就知道了,有函数就用,没有就现写
是的变种。它的任务是将的结果尽量的简化。
总是返回一个列表。就算是所有元素长度都一样,没必要是一个列表的时候,他也给你返回列表。
就会更加灵活一些,可以直接返回一个包含所有元素的向量,将它简化。
对比:
先看一下“一根筋”的
再来看一下:
如果数据不适合简化的话,还是会返回一个列表的。
参考资料:
视频课程 R Programming by Johns Hopkins University:https://www.coursera.org/learn/r-programming/home/welcome
讲义 Programming for Data Science :https://bookdown.org/rdpeng/rprogdatascience/R
领取专属 10元无门槛券
私享最新 技术干货