我试图弄清楚如何使用apply来计算两个矩阵的每一行的MSE,其中一个是预测和其他正确的值。
我的MSE功能看起来像
mse <- function(x_hat,x) {
return(sum((x_hat-x)^2)/length(x))
}
所以第一个MSE的计算结果为
mse(results[1,],real[1,])
如何使用apply为两个矩阵的每一行计算?我对作为第一个应用参数的内容感到困惑,因为它必须是一个变量。
答案 0 :(得分:1)
你可以在行索引上lapply()
,传入x_hat
和x
作为附加参数。这将需要更改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)
mse()
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()
保持不变,比修改版本更简单。
如果您希望将结果简化为MSE值的向量而不是列表,则可以将lapply()
调用更改为sapply()
。
答案 1 :(得分:1)
您不需要apply
。您的函数几乎完全被矢量化,因此您可以放入矩阵并完成它。这样可行。
mse<-function(x_hat,x) rowMeans((x_hat-x)^2)
现在,您可以运行:
mse(x_hat,x)
你将获得一个MSE向量,每行一个。