2016-04-08 20 views
0

Çok, çok spesifik bir soru olarak` 2L` alarak Ar function`, ama ben düşünüyorum ne R.`süpürme() girişi

yılında contr.poly() içinde

Ben kodu çözmeye çalışırken şaşırıp son engel ... contr.poly()'un kritik parçası olan bu iç işlev, make.poly() var.

 [,1] [,2] [,3] [,4] 
[1,] 1 -1.5 1 -0.3 
[2,] 1 -0.5 -1 0.9 
[3,] 1 0.5 -1 -0.9 
[4,] 1 1.5 1 0.3 

Oradan işlev sweep() aşağıdaki çağrı ve sonucu ile uygulanır:

Z <- sweep(raw, 2L, apply(raw, 2L, function(x) sqrt(sum(x^2))), 
     "/", check.margin = FALSE) 

    [,1]  [,2] [,3]  [,4] 
[1,] 0.5 -0.6708204 0.5 -0.2236068 
[2,] 0.5 -0.2236068 -0.5 0.6708204 
[3,] 0.5 0.2236068 -0.5 -0.6708204 
[4,] 0.5 0.6708204 0.5 0.2236068 

Ben aşina değilim make.poly içinde ben contr.poly(4) içindir oluşturulan bir raw matris olduğunu görüyoruz apply işlevleri, ve sweep, en azından sözdiziminde benzer, ancak 2L'un ne yaptığını anlamıyorum ve "/" ve check.margin = F matematiksel operayı anlamak için önemli olduğunu bilmiyorum gerçekleştiriliyor.

DÜZENLEME: this için ... oldukça kolay sayesinde - sadece matrisin function(x) uygulanan kolon-bazlı, her bir giriş ile "/" bölünmesiyle vektör uzunlukları normalleştirir.

+1

(1) 'L 'bir tamsayı (kesinlikle gerekli değil, yalnızca biri doğru) gösterir; (2) '' silme '' okuyor musunuz ....? –

+0

Süpürme, soruna cevabınızı bulduğunuzda, N – Zelazny7

+0

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. –

cevap

0

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