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

R: how to use symbols as a FUN for apply?

在 R 的申请文档中,它说:

FUN:应用的功能:详见“详情”。对于 +、%*% 等函数,函数名必须用反引号引起来。

后半句没看懂

当我做

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

我得到了矩阵的转置

当我这样做时

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

我收到一个错误。

我正在尝试获取此矩阵的逐行和与乘积。

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

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

做类似转置的事情,因为它逐行提供 matrix1 对象,returns 将每个操作的值作为列。另一方面,如果您指定了:

 apply(matrix1, 2, "+")

不会出现转置,因为始终returns应用其值作为列优先结果。

在第二种情况下,您没有为“%*%”运算符提供第二个参数。 “+”运算符可以是一元或二元运算符,但“%*%”运算符始终是二元运算符。 (将“%*%”与 apply 和单个维度一起使用并没有多大意义,因为“%*%”实际上是作为独立运算符设计的。如果你想要按行求和,然后使用:

 rowSums(matrix1)

但你可以使用更慢的:

  apply(matrix1, 1, sum)

产品用途:

  apply(matrix1, 1, prod)

+ 和 %*% 都不是为了将它们的参数折叠成单个值而设计的,这与如此设计的 sum 和 prod 形成对比。

回复评论。 %*% 运算符执行 "matrix multiply" 操作。第一个参数的 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