[R] Basic question about re-writing for loop as a function
Jim Holtman
jholtman at gmail.com
Thu Sep 1 05:18:55 CEST 2011
sorry, did not see your data at the bottom of the email
Sent from my iPad
On Aug 29, 2011, at 9:55, Chris Beeley <chris.beeley at gmail.com> wrote:
> Hello-
>
> Sorry to ask a basic question, but I've spent many hours on this now
> and seem to be missing something.
>
> I have a loop that looks like this:
>
> mainmat=data.frame(matrix(data=0, ncol=92, nrow=length(predata$Words_MH)))
>
> for(i in 1:length(predata$Words_MH)){
> for(j in 1:92){
>
> mainmat[i,j]=ifelse(j %in%
> as.numeric(unlist(strsplit(predata$Words_MH[i], split=","))), 1, 0)
>
> }
> }
>
> What it's doing is creating a matrix with 92 columns, that's the
> number of different codes, and then for every row of my data it looks
> to see if the code (code 1, code 2, etc.) is in the string and if it
> is, returns a 1 in the relevant column (column 1 for code 1, column 2
> for code 2, etc.)
>
> There are 1000 rows in the database, and I have to run several
> versions of this code, so it just takes way too long, I have been
> trying to rewrite using lapply. I tried this:
>
> myfunction=function(x, y) ifelse(x %in%
> as.numeric(unlist(strsplit(predata$Words_MH[y], split=","))), 1, 0)
>
> for(j in 1:92){
> mainmat[,j]= lapply(predata$Words, myfunction)
> }
>
> but I don't think I can use something that takes two inputs, and I
> can't seem to remove either.
>
> Here's a dput of the first 10 rows of the variable in case that's helpful:
>
> predata$Words=c("1", "1", "1", "1", "2,3,4", "5", "1", "1", "6", "7,8,9,10")
>
> Given these data, I want the function to return, for the first column,
> 1, 1, 1, 1, 0, 0, 1, 1, 0, 0 (because those are the values of Words
> which contain a 1) and for the second column return 0, 0, 0, 0, 1, 0,
> 0, 0, 0, 0 (because the fifth value is the only one that contains a
> 2).
>
> Any suggestions gratefully received!
>
> Chris Beeley
> Institute of Mental Health, UK
>
> ______________________________________________
> R-help at r-project.org mailing list
> https://stat.ethz.ch/mailman/listinfo/r-help
> PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
> and provide commented, minimal, self-contained, reproducible code.
More information about the R-help
mailing list