Dear R users, I would like to transform the following "for loop" from R-code to C-code because it takes really long time to have inc.freqy table. Unfortunately, I do not have experience to write C code. Plese, give me some example or advise to transfrom the R to C code. I have attached the code and some result that I made in R. Have a nice day. Hong Su # Data import ct10_pt1_neartree<-read.table("~/Desktop/hongsu/clustered_pattern/ct10/ct10/ct10_58ft_pt1_neartree", header=TRUE, sep=",", na.strings="NA", dec=".", strip.white=TRUE) test<-round(ct10_pt1_neartree, digits=1) # randomly select 2 data set for test test<-as.matrix(test[sample(2,replace=T),]) test # Selected Data> testRpt1 Rpt2 Rpt3 Rpt4 Rpt5 Rpt6 Rpt7 Rpt8 Rpt9 Rpt10 Rpt11 Rpt12 Rpt13 Trial1 19.3 9.1 20.7 3.0 21.4 14.5 8.2 10.5 7.4 11.0 6.9 9.5 15.4 Trial2 24.5 22.2 4.9 7.8 20.9 12.5 18.3 6.5 7.6 2.2 8.9 19.6 21.1 Rpt14 Rpt15 Rpt16 Rpt17 Rpt18 Rpt19 Rpt20 Rpt21 Rpt22 Rpt23 Rpt24 Rpt25 Trial1 49.2 39.9 18.3 14.8 29.9 27.3 20.2 14.6 9.5 14.2 7.5 16.0 Trial2 38.6 12.8 1.5 12.5 4.6 10.6 14.5 12.5 5.8 14.0 55.9 4.8 Rpt26 Rpt27 Rpt28 Rpt29 Rpt30 Rpt31 Rpt32 Trial1 19.7 12.9 5.3 3.1 11.7 19.0 21.2 Trial2 0.8 11.3 4.7 12.5 5.5 5.9 5.2 # N of columns in test n.center.point<-ncol(test) # Maximum number in test max.dist<-max(test) # make distance unit.dist <- seq(0, round(max.dist, digit=1),0.1) # change file # for loop (need to change C) inc.freqy<-matrix(0,nrow(test), length(unit.dist)) for(i in 1:nrow(test)){ for (j in 1:length(unit.dist)){ inc.freqy[i,j]<-length(test[i,][test[i,]<=unit.dist[j]]) } } inc.freqy[,1:30] # partial result for inc.freqy> inc.freqy[,1:30][,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10] [,11] [,12] [,13] [,14] [1,] 0 0 0 0 0 0 0 0 0 0 0 0 0 0 [2,] 0 0 0 0 0 0 0 0 1 1 1 1 1 1 [,15] [,16] [,17] [,18] [,19] [,20] [,21] [,22] [,23] [,24] [,25] [,26] [1,] 0 0 0 0 0 0 0 0 0 0 0 0 [2,] 1 2 2 2 2 2 2 2 3 3 3 3 [,27] [,28] [,29] [,30] [1,] 0 0 0 0 [2,] 3 3 3 3 -- View this message in context: http://n4.nabble.com/Help-transfrom-R-to-C-tp1751764p1751764.html Sent from the R help mailing list archive at Nabble.com.
On Mon, 5 Apr 2010, pinusan wrote:> > Dear R users, > > I would like to transform the following "for loop" from R-code to C-code > because it takes really long time to have inc.freqy table. > Unfortunately, I do not have experience to write C code. > Plese, give me some example or advise to transfrom the R to C code.I think you can just use rowSums( test, unit.dist, "<=") instead of your for() loop. -thomas> I have attached the code and some result that I made in R. > > Have a nice day. > > Hong Su > > # Data import > ct10_pt1_neartree<-read.table("~/Desktop/hongsu/clustered_pattern/ct10/ct10/ct10_58ft_pt1_neartree", > header=TRUE, sep=",", na.strings="NA", dec=".", strip.white=TRUE) > test<-round(ct10_pt1_neartree, digits=1) > > # randomly select 2 data set for test > test<-as.matrix(test[sample(2,replace=T),]) > test > > # Selected Data >> test > Rpt1 Rpt2 Rpt3 Rpt4 Rpt5 Rpt6 Rpt7 Rpt8 Rpt9 Rpt10 Rpt11 Rpt12 Rpt13 > Trial1 19.3 9.1 20.7 3.0 21.4 14.5 8.2 10.5 7.4 11.0 6.9 9.5 15.4 > Trial2 24.5 22.2 4.9 7.8 20.9 12.5 18.3 6.5 7.6 2.2 8.9 19.6 21.1 > Rpt14 Rpt15 Rpt16 Rpt17 Rpt18 Rpt19 Rpt20 Rpt21 Rpt22 Rpt23 Rpt24 > Rpt25 > Trial1 49.2 39.9 18.3 14.8 29.9 27.3 20.2 14.6 9.5 14.2 7.5 > 16.0 > Trial2 38.6 12.8 1.5 12.5 4.6 10.6 14.5 12.5 5.8 14.0 55.9 > 4.8 > Rpt26 Rpt27 Rpt28 Rpt29 Rpt30 Rpt31 Rpt32 > Trial1 19.7 12.9 5.3 3.1 11.7 19.0 21.2 > Trial2 0.8 11.3 4.7 12.5 5.5 5.9 5.2 > > # N of columns in test > n.center.point<-ncol(test) > > # Maximum number in test > max.dist<-max(test) > > # make distance > unit.dist <- seq(0, round(max.dist, digit=1),0.1) # change file > > > # for loop (need to change C) > inc.freqy<-matrix(0,nrow(test), length(unit.dist)) > > for(i in 1:nrow(test)){ > for (j in 1:length(unit.dist)){ > inc.freqy[i,j]<-length(test[i,][test[i,]<=unit.dist[j]]) > } > } > > inc.freqy[,1:30] > > # partial result for inc.freqy >> inc.freqy[,1:30] > [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10] [,11] [,12] [,13] > [,14] > [1,] 0 0 0 0 0 0 0 0 0 0 0 0 0 > 0 > [2,] 0 0 0 0 0 0 0 0 1 1 1 1 1 > 1 > [,15] [,16] [,17] [,18] [,19] [,20] [,21] [,22] [,23] [,24] [,25] [,26] > [1,] 0 0 0 0 0 0 0 0 0 0 0 0 > [2,] 1 2 2 2 2 2 2 2 3 3 3 3 > [,27] [,28] [,29] [,30] > [1,] 0 0 0 0 > [2,] 3 3 3 3 > > -- > View this message in context: http://n4.nabble.com/Help-transfrom-R-to-C-tp1751764p1751764.html > Sent from the R help mailing list archive at Nabble.com. > > ______________________________________________ > 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. >Thomas Lumley Assoc. Professor, Biostatistics tlumley at u.washington.edu University of Washington, Seattle
maybe inc.freqy <- sapply(unit.dist, function(x) rowSums( test <= x)) suffices? b On Mon, Apr 5, 2010 at 5:31 PM, pinusan <anhong at msu.edu> wrote:> > Dear R users, > > I would like to transform the following "for loop" from R-code to C-code > because it takes really long time to have inc.freqy table. > Unfortunately, I do not have experience to write C code. > Plese, give me some example or advise to transfrom the R to C code. > > I have attached the code and some result that I made in R. > > Have a nice day. > > Hong Su > > # Data import > ct10_pt1_neartree<-read.table("~/Desktop/hongsu/clustered_pattern/ct10/ct10/ct10_58ft_pt1_neartree", > ? ? ? header=TRUE, sep=",", na.strings="NA", dec=".", strip.white=TRUE) > test<-round(ct10_pt1_neartree, digits=1) > > # randomly select 2 data set for test > test<-as.matrix(test[sample(2,replace=T),]) > test > > # Selected Data >> test > ? ? ? Rpt1 Rpt2 Rpt3 Rpt4 Rpt5 Rpt6 Rpt7 Rpt8 Rpt9 Rpt10 Rpt11 Rpt12 Rpt13 > Trial1 19.3 ?9.1 20.7 ?3.0 21.4 14.5 ?8.2 10.5 ?7.4 ?11.0 ? 6.9 ? 9.5 ?15.4 > Trial2 24.5 22.2 ?4.9 ?7.8 20.9 12.5 18.3 ?6.5 ?7.6 ? 2.2 ? 8.9 ?19.6 ?21.1 > ? ? ? Rpt14 Rpt15 Rpt16 Rpt17 Rpt18 Rpt19 Rpt20 Rpt21 Rpt22 Rpt23 Rpt24 > Rpt25 > Trial1 ?49.2 ?39.9 ?18.3 ?14.8 ?29.9 ?27.3 ?20.2 ?14.6 ? 9.5 ?14.2 ? 7.5 > 16.0 > Trial2 ?38.6 ?12.8 ? 1.5 ?12.5 ? 4.6 ?10.6 ?14.5 ?12.5 ? 5.8 ?14.0 ?55.9 > 4.8 > ? ? ? Rpt26 Rpt27 Rpt28 Rpt29 Rpt30 Rpt31 Rpt32 > Trial1 ?19.7 ?12.9 ? 5.3 ? 3.1 ?11.7 ?19.0 ?21.2 > Trial2 ? 0.8 ?11.3 ? 4.7 ?12.5 ? 5.5 ? 5.9 ? 5.2 > > # N of columns in test > n.center.point<-ncol(test) > > # Maximum number in test > max.dist<-max(test) > > # make distance > unit.dist <- seq(0, round(max.dist, digit=1),0.1) # change file > > > # for loop (need to change C) > inc.freqy<-matrix(0,nrow(test), length(unit.dist)) > > for(i in 1:nrow(test)){ > ?for (j in 1:length(unit.dist)){ > ? ?inc.freqy[i,j]<-length(test[i,][test[i,]<=unit.dist[j]]) > ? ?} > ? } > > inc.freqy[,1:30] > > # partial result for inc.freqy >> inc.freqy[,1:30] > ? ? [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10] [,11] [,12] [,13] > [,14] > [1,] ? ?0 ? ?0 ? ?0 ? ?0 ? ?0 ? ?0 ? ?0 ? ?0 ? ?0 ? ? 0 ? ? 0 ? ? 0 ? ? 0 > 0 > [2,] ? ?0 ? ?0 ? ?0 ? ?0 ? ?0 ? ?0 ? ?0 ? ?0 ? ?1 ? ? 1 ? ? 1 ? ? 1 ? ? 1 > 1 > ? ? [,15] [,16] [,17] [,18] [,19] [,20] [,21] [,22] [,23] [,24] [,25] [,26] > [1,] ? ? 0 ? ? 0 ? ? 0 ? ? 0 ? ? 0 ? ? 0 ? ? 0 ? ? 0 ? ? 0 ? ? 0 ? ? 0 ? ? 0 > [2,] ? ? 1 ? ? 2 ? ? 2 ? ? 2 ? ? 2 ? ? 2 ? ? 2 ? ? 2 ? ? 3 ? ? 3 ? ? 3 ? ? 3 > ? ? [,27] [,28] [,29] [,30] > [1,] ? ? 0 ? ? 0 ? ? 0 ? ? 0 > [2,] ? ? 3 ? ? 3 ? ? 3 ? ? 3 > > -- > View this message in context: http://n4.nabble.com/Help-transfrom-R-to-C-tp1751764p1751764.html > Sent from the R help mailing list archive at Nabble.com. > > ______________________________________________ > 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. >