Using apply with a different function argument for each element's evaluation

后端 未结 2 1025
感动是毒
感动是毒 2021-01-28 06:20

Let\'s say I have a matrix, mat.

mat <- matrix(1:5, nrow = 10, ncol = 3, byrow = TRUE)

And I have some sort of function that I want to apply

相关标签:
2条回答
  • 2021-01-28 06:52

    In this specific case, just roll the "est" values out to a matrix that matches the "true" values. Then you can subtract matrices (which R will automatically do componentwise) and use apply(), or here, colMeans():

    > true <- matrix(1:5, nrow = 10, ncol = 3, byrow = TRUE)
    > est <- matrix(1:3,nrow=nrow(true),ncol=ncol(true),byrow=TRUE)
    > sqrt(colMeans((true-est)^2))
    [1] 2.449490 1.732051 1.414214
    > 
    

    In more general cases involving lists, mapply() may be helpful.

    0 讨论(0)
  • 2021-01-28 07:10

    You could use mapply where x would be your matrix column, and y the constant. I didn't bother with converting the matrix into a list the smart way, so I have to use unlist inside the function.

    mat <- matrix(1:5, nrow = 10, ncol = 3, byrow = TRUE)
    
    mat.list <- apply(mat, MARGIN = 2, FUN = list)
    
    mapply(FUN = function(x, y) {
      sqrt(mean((unlist(x) - y)^2))
    }, x = mat.list, y = list(1, 2, 3))
    
    [1] 2.449490 1.732051 1.414214
    
    0 讨论(0)
提交回复
热议问题