在R的适用文档中,它说:
FUN:要应用的功能:请参见“详细信息”。对于+,%*%等功能,必须对名称进行反引号或加引号。
我不明白句子的后半部分。
当我这样做
matrix1 = matrix(rnorm(3*4), 3, 4)
apply(matrix1, 1, "+")
我得到矩阵的转置
当我这样做
apply(matrix, 1, "%*%")
我得到一个错误。
我正在尝试获取此矩阵的按行总和。
此外,如果不是文档所要讨论的内容,那么当+和%*%作为apply的FUN参数提供时,应该做什么?
答案 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