Grstats Forum

R Games / Fun

Πήγαινε κάτω

R Games / Fun

Δημοσίευση από R4ever Την / Το Τρι 16 Φεβ 2010 - 12:49

Asxoloumai polla xronia me tin R kai pisteuo oti a kalyteros tropos gia na mathei kapoios kali R einai na prospathei na lysei mikra computational problimata kai na meletaei ton kodika allon. Gia tous xristes to forum pou tha tous endiefere kati tetoio ki exoun xrono skeftika na ftiakso ena thread me R (Olympic) Games, i.e., tha kano upload ena mikro problima (tis perissoteres fores motivated apo tin R-help) kai opoios endiaferetai mporei na proteinei mia R lysi (sto telos tha mporoume na kanoume discussion gia to poia theoteitai kalyteri).

Proto problima loipon:

I have a matrix with positive numbers, negative numbers, and NAs. An
example of the matrix is as follows

-1 -1 2 NA
3 3 -2 -1
1 1 NA -2

I need to compute a scaled version of this matrix. The scaling method is
dividing each positive numbers in each row by the sum of positive numbers
in that row and dividing each negative numbers in each row by the sum of
absolute value of negative numbers in that row.

So the resulting matrix would be

-1/2 -1/2 2/2 NA
3/6 3/6 -2/3 -1/3
1/2 1/2 NA -2/2

Is there an efficient way to do that in R? (hint: mporei na ginei me ena one-liner)
avatar
R4ever

Posts : 44
Join date : 20/01/2010
Age : 38

Επιστροφή στην κορυφή Πήγαινε κάτω

Απ: R Games / Fun

Δημοσίευση από paterask Την / Το Τρι 16 Φεβ 2010 - 14:44

Έφτιαξα και εγώ ένα πρόχειρο προγραμματάκι, μέσω πάρνηθας πάω βασικά αλλά ήταν το πρώτο που ήρθε στο νιονιό μ!
προυπόθεση ότι δεν υπάρχουν μηδενικές τιμές στο πίνακα. Υπάρχει κάποιος άλλος τρόπος να χειριστείς τα ΝΑ?
Σπόιλερ:
Κώδικας:


xtest[is.na(xtest)]=0
for(i in 1:length(row.names(xtest))){
   xarn=sum(abs(xtest[i,][xtest[i,]<0]))
   xthet=sum(xtest[i,][xtest[i,]>0])
   xtest[i,][xtest[i,]>0]=xtest[i,][xtest[i,]>0]/xthet
   xtest[i,][xtest[i,]<0]=xtest[i,][xtest[i,]<0]/xarn
}
xtest[xtest==0]=NA
avatar
paterask

Posts : 356
Join date : 17/10/2009
Location : Utrecht, The Netherlands

http://goo.gl/5S6Hpv

Επιστροφή στην κορυφή Πήγαινε κάτω

Απ: R Games / Fun

Δημοσίευση από R4ever Την / Το Τετ 17 Φεβ 2010 - 14:35

Mia alli lysi einai:

Κώδικας:

mat <- rbind(c(-1, -1, 2, NA), c(3, 3, -2, -1), c(1, 1, NA, -2))

mat / ave(abs(mat), row(mat), sign(mat), FUN = sum)
avatar
R4ever

Posts : 44
Join date : 20/01/2010
Age : 38

Επιστροφή στην κορυφή Πήγαινε κάτω

Απ: R Games / Fun

Δημοσίευση από R4ever Την / Το Κυρ 21 Φεβ 2010 - 8:20

Deutero problima:

Dedomenou oti exoume enan matrix, p.x.,

Κώδικας:

mat <- matrix(c(1,4,3,6), 2, 2)

theloume na ton epanalaboume 50 fores, diladi

Κώδικας:

      [,1] [,2] [,3] [,4] [,5] [,6]
[1,]    1    3    1    3    1    3
[2,]    4    6    4    6    4    6

k.l.p., mexri na exoume 100 stiles.
avatar
R4ever

Posts : 44
Join date : 20/01/2010
Age : 38

Επιστροφή στην κορυφή Πήγαινε κάτω

Απ: R Games / Fun

Δημοσίευση από mp83 Την / Το Κυρ 21 Φεβ 2010 - 12:45

Κατι τετοιο δλδ...

Κώδικας:
>matrix(rep(mat, 50), nrow(mat))
    [,87] [,88] [,89] [,90] [,91] [,92] [,93] [,94] [,95] [,96] [,97] [,98]
[1,]    1    3    1    3    1    3    1    3    1    3    1    3
[2,]    4    6    4    6    4    6    4    6    4    6    4    6
    [,99] [,100]
[1,]    1      3
[2,]    4      6
avatar
mp83

Posts : 67
Join date : 10/11/2009
Location : Athens

http://statsravingmad.com/blog

Επιστροφή στην κορυφή Πήγαινε κάτω

Απ: R Games / Fun

Δημοσίευση από R4ever Την / Το Κυρ 21 Φεβ 2010 - 13:10

Ontos auti einai mia apo tis pio efficient lyseis -- mia alli using do.call() einai:

Κώδικας:

do.call(cbind, rep(list(mat), 50))
avatar
R4ever

Posts : 44
Join date : 20/01/2010
Age : 38

Επιστροφή στην κορυφή Πήγαινε κάτω

Απ: R Games / Fun

Δημοσίευση από mp83 Την / Το Κυρ 21 Φεβ 2010 - 13:29

H do.call δεν ειναι στο toolbox μου (ακόμα...) Embarassed
avatar
mp83

Posts : 67
Join date : 10/11/2009
Location : Athens

http://statsravingmad.com/blog

Επιστροφή στην κορυφή Πήγαινε κάτω

Απ: R Games / Fun

Δημοσίευση από R4ever Την / Το Δευ 22 Φεβ 2010 - 21:11

Mia akoma lysi:

Κώδικας:

mat <- matrix(c(1,4,3,6), 2, 2)
mat[, rep(seq_len(ncol(mat)), 50)]
avatar
R4ever

Posts : 44
Join date : 20/01/2010
Age : 38

Επιστροφή στην κορυφή Πήγαινε κάτω

Απ: R Games / Fun

Δημοσίευση από R4ever Την / Το Τρι 2 Μαρ 2010 - 16:42

Mia akomi mikri R exercise: exoume 11 times pou anikoun se 5 omades:

Κώδικας:

groups <- list(gp1 = 1:3, gp2 = 4:5, gp3 = 6:7,
              gp4 = 8:10, gp5 = 11)

Theloume na kataskeuasoume olous tous dynatous syndiasmous 3 timon, opou kathe timi proerxetai apo diaforetiki omada.
avatar
R4ever

Posts : 44
Join date : 20/01/2010
Age : 38

Επιστροφή στην κορυφή Πήγαινε κάτω

Επιστροφή στην κορυφή


 
Δικαιώματα σας στην κατηγορία αυτή
Δεν μπορείτε να απαντήσετε στα Θέματα αυτής της Δ.Συζήτησης