[R] beginner programming question

Gabor Grothendieck ggrothendieck at myway.com
Wed Dec 17 21:02:49 CET 2003




Define function f to take a vector as input representing
a single input row.   f should (1) transform this to a vector 
representing the required row of output or else (2) produce 
NULL if no row is to be output for that input row.

Then use this code where z is your input matrix:

t( matrix( unlist( apply( z, 1, f ) ), 2) )



---
Date: Wed, 17 Dec 2003 21:28:05 +0200 
From: Adrian Dusa <adi at roda.ro>
To: <r-help at stat.math.ethz.ch> 
Subject: [R] beginner programming question 

 
 
Hi all,



The last e-mails about beginners gave me the courage to post a question;
from a beginner's perspective, there are a lot of questions that I'm
tempted to ask. But I'm trying to find the answers either in the
documentation, either in the about 15 free books I have, either in the
help archives (I often found many similar questions posted in the past).

Being an (still actual) user of SPSS, I'd like to be able to do
everything in R. I've learned that the best way of doing it is to
struggle and find a solution no matter what, refraining from doing it
with SPSS. I've became more and more aware of the almost unlimited
possibilities that R offers and I'd like to completely switch to R
whenever I think I'm ready.



I have a (rather theoretical) programming problem for which I have found
a solution, but I feel it is a rather poor one. I wonder if there's some
other (more clever) solution, using (maybe?) vectorization or
subscripting.



A toy example would be:



rel1 rel2 rel3 age0 age1 age2 age3
sex0 sex1 sex2 sex3

1 3 NA 25 23 2 NA
1 2 1 NA

4 1 3 35 67 34 10
2 2 1 2

1 4 4 39 40 59 60
1 2 2 1

4 NA NA 45 70 NA NA
2 2 NA NA



where rel1...3 states the kinship with the respondent (person 0)

code 1 meaning husband/wife, code 4 meaning parent and code 3 for
children.



I would like to get the age for husbands (code 1) in a first column and
wife's age in the second:



ageh agew

25 23

34 35

39 40



My solution uses *for* loops and *if*s checking for code 1 in each
element in the first 3 columns, then checking in the last three columns
for husband's code, then taking the corresponding age in a new matrix.
I've learned that *for* loops are very slow (and indeed with my dataset
of some 2000 rows and 13 columns for kinship it takes quite a lot).

I found the "Looping" chapter in "S poetry" very useful (it did saved me
from *for* loops a couple of times, thanks!).



Any hints would be appreciated,

Adrian



~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Adrian Dusa (adi at roda.ro)
Romanian Social Data Archive (www.roda.ro <http://www.roda.ro/>; )
1, Schitu Magureanu Bd.
76625 Bucharest sector 5
Romania




More information about the R-help mailing list