Vì vậy, tôi muốn áp dụng một hàm trên một ma trận trong R. này hoạt động thực sự trực giác cho các chức năng đơn giản:R: áp dụng chức năng trên ma trận và giữ kích thước ma trận
> (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
... nhưng rõ ràng tôi không hiểu tất cả các hoạt động của nó:
> 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
tôi đọc lên về vấn đề này và phát hiện ra về Vectorize và sapply, mà cả hai có vẻ tuyệt vời và giống như những gì tôi muốn, ngoại trừ việc cả trong số họ chuyển đổi ma trận của tôi vào một danh sách:
> 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
... trong khi tôi muốn giữ nó trong ma trận với kích thước hiện tại của nó. Làm thế nào tôi có thể làm điều này? Cảm ơn!
Ngoài ra kiểm tra bài này hữu ích trên các phiên bản khác nhau của ứng dụng: http://nsaunders.wordpress.com/2010/08/20/a-brief-introduction-to-apply-in-r/ – patrickmdnet