apply 用于在数组或矩阵的边界上评估函数(可能是匿名函数)。
让我们使用iris数据集来说明这个想法。该iris数据集具有来自3个物种的150种花朵的测量值。让我们看看该数据集的结构:
> head(iris) Sepal.LengthSepal.WidthPetal.LengthPetal.Width Species 1 5.1 3.5 1.4 0.2 setosa 2 4.9 3.0 1.4 0.2 setosa 3 4.7 3.2 1.3 0.2 setosa 4 4.6 3.1 1.5 0.2 setosa 5 5.0 3.6 1.4 0.2 setosa 6 5.4 3.9 1.7 0.4 setosa
现在,假设您想知道每个变量的平均值。解决此问题的一种方法可能是使用for循环,但是R程序员通常会更喜欢使用apply(出于某些原因,请参见备注):
> apply(iris[1:4], 2, mean) Sepal.Length Sepal.WidthPetal.Length Petal.Width 5.843333 3.057333 3.758000 1.199333
在第一个参数中,我们子集iris只包括前4列,因为它mean仅适用于数字数据。
第二个参数值2表示我们只想在列上工作(r×c数组的第二个下标);1会给行的意思。
同样,我们可以计算出更有意义的值:
# standard deviation apply(iris[1:4], 2, sd) # variance apply(iris[1:4], 2, var)
警告:R具有一些内置函数,这些函数更适合于计算列和行之和以及均值:colMeans和rowMeans。
现在,让我们做另外一个更有意义的任务:让我们只计算那些大于的值的均值0.5。为此,我们将创建自己的mean功能。
> our.mean.function <- function(x) { mean(x[x > 0.5]) } > apply(iris[1:4], 2, our.mean.function) Sepal.Length Sepal.WidthPetal.Length Petal.Width 5.843333 3.057333 3.758000 1.665347
(请注意的均值之差Petal.Width)
但是,如果我们不想在其余的代码中使用此功能呢?然后,我们可以使用匿名函数,并编写如下代码:
apply(iris[1:4], 2, function(x) { mean(x[x > 0.5]) })
因此,正如我们所看到的,我们可以仅使用apply一行就对数据集的列或行执行相同的操作。
注意:由于apply根据指定函数结果的长度返回的输出类型非常不同,因此在您不进行交互式工作的情况下,它可能不是最佳选择。其他一些*apply家庭功能更具可预测性(请参见备注)。
问题内容: 我想确保数据库中是否存在临时表。 我尝试使用函数,但似乎无法将其用于临时表。 我该如何解决这个问题? 问题答案: 使用 在另一个数据库的上下文中运行时获取临时表的ID。
5.6. 匿名函数 拥有函数名的函数只能在包级语法块中被声明,通过函数字面量(function literal),我们可绕过这一限制,在任何表达式中表示一个函数值。函数字面量的语法和函数声明相似,区别在于func关键字后没有函数名。函数值字面量是一种表达式,它的值被成为匿名函数(anonymous function)。 函数字面量允许我们在使用函数时,再定义它。通过这种技巧,我们可以改写之前对st
有没有想过定义一个很短的回调函数,但又不想用 def 的形式去写一个那么长的函数,那么有没有快捷方式呢? 答案是有的。 python 使用 lambda 来创建匿名函数,也就是不再使用 def 语句这样标准的形式定义一个函数。 匿名函数主要有以下特点: lambda 只是一个表达式,函数体比 def 简单很多。 lambda 的主体是一个表达式,而不是一个代码块。仅仅能在 lambda 表达式中封
当我们在传入函数时,有些时候,不需要显式地定义函数,直接传入匿名函数更方便。 在Python中,对匿名函数提供了有限支持。还是以map()函数为例,计算f(x)=x2时,除了定义一个f(x)的函数外,还可以直接传入匿名函数: >>> map(lambda x: x * x, [1, 2, 3, 4, 5, 6, 7, 8, 9]) [1, 4, 9, 16, 25, 36, 49, 64, 81]
当我们在传入函数时,有些时候,不需要显式地定义函数,直接传入匿名函数更方便。 在Python中,对匿名函数提供了有限支持。还是以map()函数为例,计算f(x)=x2时,除了定义一个f(x)的函数外,还可以直接传入匿名函数: >>> list(map(lambda x: x * x, [1, 2, 3, 4, 5, 6, 7, 8, 9])) [1, 4, 9, 16, 25, 36, 49, 6
本文向大家介绍JavaScript匿名函数与委托使用示例,包括了JavaScript匿名函数与委托使用示例的使用技巧和注意事项,需要的朋友参考一下