R:如何使用符号作为申请的FUN?

时间:2018-06-30 16:42:16

标签: r function sum apply cartesian-product

在R的适用文档中,它说:

FUN:要应用的功能:请参见“详细信息”。对于+,%*%等功能,必须对名称进行反引号或加引号。

我不明白句子的后半部分。

当我这样做

     matrix1 = matrix(rnorm(3*4), 3, 4)
     apply(matrix1, 1, "+")

我得到矩阵的转置

当我这样做

     apply(matrix, 1, "%*%")

我得到一个错误。

我正在尝试获取此矩阵的按行总和。

此外,如果不是文档所要讨论的内容,那么当+和%*%作为apply的FUN参数提供时,应该做什么?

1 个答案:

答案 0 :(得分:4)

 matrix1 = matrix(rnorm(3*4), 3, 4)
 apply(matrix1, 1, "+")

进行转置之类的操作,是因为它逐一提供了matrix1对象的行,并将每个操作的值作为列返回。另一方面,如果您指定了:

 apply(matrix1, 2, "+")

不会出现转置的外观,因为apply始终以列为主结果返回其值。

在第二个实例中,您没有给“ %*%”运算符提供第二个参数。 “ +”运算符可以是一元或二进制,但是“ %*%”运算符始终是二进制。 (将“ %*%”和“ apply”和一个维度一起使用并没有太大的意义,因为“ %*%”实际上是作为独立的运算符设计的。如果需要然后按行求和:

 rowSums(matrix1)

但是您可以使用较慢的速度:

  apply(matrix1, 1, sum)

用于产品用途:

  apply(matrix1, 1, prod)

与这样设计的%*%和prod相比,+和sum都不旨在将其参数折叠为单个值。

回复评论。 %*%运算符执行“矩阵乘法”操作。第一个自变量的i列乘以J行,然后求和以提供新矩阵的i-j元素。通过矩阵乘法可以完成许多具有统计或物理意义的数学运算,否则它们需要双for环。假设您的矩阵是一堆数据值,并且您想基于一个模型得出每个行的预测,该模型的三个系数等于c(5,6,7):

  c(5,6,7)  %*% matrix1
#         [,1]     [,2]    [,3]      [,4]
#[1,] 2.047344 10.02339 1.73618 0.7223964