sweep()
işlevindeki işlemi yanıtlayan bir örnek.
Ben bir matris
> set.seed(0)
> (mat = matrix(rnorm(30, 5, 3), nrow= 10))
[,1] [,2] [,3]
[1,] 8.7888629 7.290780 4.327196
[2,] 4.0212999 2.602972 6.132187
[3,] 8.9893978 1.557029 5.400009
[4,] 8.8172880 4.131615 7.412569
[5,] 6.2439243 4.102355 4.828680
[6,] 0.3801499 3.765468 6.510824
[7,] 2.2142989 5.756670 8.257308
[8,] 4.1158387 2.324237 2.927138
[9,] 4.9826985 6.307050 1.146202
[10,] 12.2139602 1.287385 5.140179
ile başlar ve ben merkezi veri columnwise istiyorum. Verilen, scale(mat, center = T, scale = F)
kullanabilir ve yapılması, ancak bu fonksiyon gibi sonunda size niteliklerin bir listesini vermek bulmak: Sütun demektir
attr(,"scaled:center")
[1] 6.076772 3.912556 5.208229
gelir. Olmak güzel, ama matris, temiz ve düzgün istedim.
> (centered = sweep(mat, 2, apply(mat,2, function(x) mean(x)),"-"))
[,1] [,2] [,3]
[1,] 2.7120910 3.3782243 -0.88103281
[2,] -2.0554720 -1.3095838 0.92395779
[3,] 2.9126259 -2.3555271 0.19177993
[4,] 2.7405161 0.2190592 2.20433938
[5,] 0.1671524 0.1897986 -0.37954947
[6,] -5.6966220 -0.1470886 1.30259477
[7,] -3.8624730 1.8441143 3.04907894
[8,] -1.9609332 -1.5883194 -2.28109067
[9,] -1.0940734 2.3944938 -4.06202721
[10,] 6.1371883 -2.6251713 -0.06805063
Yani sweep()
fonksiyonu olarak anlaşılmaktadır: İlginç
sweep(here goes matrix name to sweep through, tell me if you want to do it column (2) or row wise (1), but first let's calculate the second argument to use in the sweep - let's use apply on either the same matrix, or another matrix: just type the name here, again... column or row wise, now define a function(x) mean(x), almost done: now the actual operation in the function in quotes: "-" or "/"... and done
, biz tamamen farklı sütunlarda araçlarını kullanmış olabilir Yani bu ile elde edilebilir çıkıyor matriks daha sonra orijinal matriks boyunca süpürme - muhtemelen daha karmaşık bir işlem, bu fonksiyonun neden geliştirildiğine göre daha fazla.
> aux.mat = matrix(rnorm(9), nrow = 3)
> aux.mat
[,1] [,2] [,3]
[1,] -0.2793463 -0.4527840 -1.065591
[2,] 1.7579031 -0.8320433 -1.563782
[3,] 0.5607461 -1.1665705 1.156537
> (centered = sweep(mat, 2, apply(aux.mat,2, function(x) mean(x)),"-"))
[,1] [,2] [,3]
[1,] 8.1090952 8.107913 4.818142
[2,] 3.3415323 3.420105 6.623132
[3,] 8.3096302 2.374162 5.890954
[4,] 8.1375203 4.948748 7.903514
[5,] 5.5641567 4.919487 5.319625
[6,] -0.2996178 4.582600 7.001769
[7,] 1.5345313 6.573803 8.748253
[8,] 3.4360710 3.141369 3.418084
[9,] 4.3029308 7.124183 1.637147
[10,] 11.5341925 2.104517 5.631124
(1) 'L 'bir tamsayı (kesinlikle gerekli değil, yalnızca biri doğru) gösterir; (2) '' silme '' okuyor musunuz ....? –
Süpürme, soruna cevabınızı bulduğunuzda, N – Zelazny7
10 nolu bir vektörü kullanarak M X N boyutunda bir matris üzerinde bir işlem gerçekleştirirse, cevabınızı, sorunuzu yanıtlamak yerine, yanıt olarak göndermelisiniz. –