R 用apply计算两个矩阵的均方误差

R 用apply计算两个矩阵的均方误差,r,R,我试图找出如何使用apply计算两个矩阵的每一行的MSE,其中一个是预测值,另一个是正确值 我的MSE函数看起来像 mse <- function(x_hat,x) { return(sum((x_hat-x)^2)/length(x)) } 如何使用apply为两个矩阵的每一行计算该值?我不知道我会把什么作为apply的第一个参数,因为它必须是一个变量。您可以在行索引上lappy(),将x_hat和x作为附加参数传入。这需要更改MSE函数或包装器。我将向大家展示: 1:重写ms

我试图找出如何使用apply计算两个矩阵的每一行的MSE,其中一个是预测值,另一个是正确值

我的MSE函数看起来像

mse <- function(x_hat,x) {
    return(sum((x_hat-x)^2)/length(x))
}
如何使用apply为两个矩阵的每一行计算该值?我不知道我会把什么作为apply的第一个参数,因为它必须是一个变量。

您可以在行索引上
lappy()
,将
x_hat
x
作为附加参数传入。这需要更改MSE函数或包装器。我将向大家展示:

1:重写mse(),将行索引作为其第一个参数并使用它 包装器的优点是
mse()
保持不变,并且比修改后的版本更简单


如果希望将结果简化为MSE值的向量而不是列表,则可以将
lappy()
调用更改为
sapply()

您不需要
apply
。你的函数几乎是完全矢量化的,所以你可以把你的矩阵放进去,然后用它来完成。这会奏效的

mse<-function(x_hat,x) rowMeans((x_hat-x)^2)
你会得到一个mse向量,每行一个

mse2 <- function(i, x_hat, x) {
  sum((x_hat[i,] - x[i,])^2) / length(x[i,])
}

lapply(seq_len(nrow(x)), mse2, x_hat = x_hat, x = x)
wrap.mse <- function(i, x_hat, x) {
  mse(x_hat[i, ], x[i, ])
}

lapply(seq_len(nrow(x)), wrap.mse, x_hat = x_hat, x = x)
mse<-function(x_hat,x) rowMeans((x_hat-x)^2)
mse(x_hat,x)