KnowledgeHub
Questions
Tags
Users
Search
Alex Rivera
|
Logout
Edit Question
Title
Body
So I want to apply a function over a matrix in R. This works really intuitively for simple functions: > (function(x)x*x)(matrix(1:10, nrow=2)) [,1] [,2] [,3] [,4] [,5] [1,] 1 9 25 49 81 [2,] 4 16 36 64 100 ...but clearly I don't understand all of its workings: > m = (matrix(1:10, nrow=2)) > (function(x) if (x %% 3 == 0) { return(NA) } else { return(x+1) })(m) [,1] [,2] [,3] [,4] [,5] [1,] 2 4 6 8 10 [2,] 3 5 7 9 11 Warning message: In if (x == 3) { : the condition has length > 1 and only the first element will be used I read up on this and found out about Vectorize and sapply, which both seemed great and just like what I wanted, except that both of them convert my matrix into a list: > y = (function(x) if (x %% 3 == 0) { return(NA) } else { return(x+1) }) > sapply(m, y) [1] 2 3 NA 5 6 NA 8 9 NA 11 > Vectorize(y)(m) [1] 2 3 NA 5 6 NA 8 9 NA 11 ...whereas I'd like to keep it in a matrix with its current dimensions. How might I do this? Thanks!
Tags (comma-separated)
Save Edits
Cancel