Try this -- use matrices instead of dataframes if you want speed:

> p<-data.frame(a=rnorm(10),b=rnorm(10),c=rnorm(10),d=rnorm(10))
> test<-data.frame(a=rnorm(1),b=rnorm(1),c=rnorm(1),d=rnorm(1))
>
> result<-list()
> for(i in 1:nrow(p)){
+ result[[i]]<-sum((p[i,]-test)^2)
+ }
>
> result_1<-unlist(result)
>
> p_1<-cbind(p,result_1)
>
> # don't use dataframes; use matrices
> pm <- as.matrix(p)
> testm <- unlist(test)
>
> result_2 <- colSums((t(pm) - testm)^2)
> p_2 <- cbind(pm, result_2)
> p_1
            a           b          c          d  result_1
1   1.4580819  0.03351271 -0.6414914 -0.4448870  2.464525
2  -0.7603889 -0.41833604 -1.3576672 -0.1230215  6.270578
3   1.3343855 -1.35613207  2.0560362 -1.0356030  3.592794
4   0.5974293  0.88175552 -1.4756855  0.1634320  6.707364
5  -0.8008295  0.37385864 -0.7822124 -0.4896094  4.712335
6  -0.5550789  0.07063761  0.9432475  1.0785456  4.868218
7   1.0641638 -1.52241836  0.3912154  0.1071740  2.165140
8   1.5619793 -0.30982169  1.2756762 -0.8522361  1.266879
9  -0.1049558 -1.66660559  0.5425563  0.3232156  3.279428
10 -0.1565198  0.59954267 -1.3878649  1.8615366 12.132722
> p_2
               a           b          c          d  result_2
 [1,]  1.4580819  0.03351271 -0.6414914 -0.4448870  2.464525
 [2,] -0.7603889 -0.41833604 -1.3576672 -0.1230215  6.270578
 [3,]  1.3343855 -1.35613207  2.0560362 -1.0356030  3.592794
 [4,]  0.5974293  0.88175552 -1.4756855  0.1634320  6.707364
 [5,] -0.8008295  0.37385864 -0.7822124 -0.4896094  4.712335
 [6,] -0.5550789  0.07063761  0.9432475  1.0785456  4.868218
 [7,]  1.0641638 -1.52241836  0.3912154  0.1071740  2.165140
 [8,]  1.5619793 -0.30982169  1.2756762 -0.8522361  1.266879
 [9,] -0.1049558 -1.66660559  0.5425563  0.3232156  3.279428
[10,] -0.1565198  0.59954267 -1.3878649  1.8615366 12.132722
>


On Fri, Mar 16, 2012 at 8:32 AM, mrzung <mrzun...@gmail.com> wrote:
> hi,
>
> i'm really in trouble to simulate some experiment.
> that is, it takes too much time to process the following code.
>
>  following is short example,
>
> -------------------------------------------------------------------------------------------------------
>
> p<-data.frame(a=rnorm(10),b=rnorm(10),c=rnorm(10),d=rnorm(10))
> test<-data.frame(a=rnorm(1),b=rnorm(1),c=rnorm(1),d=rnorm(1))
>
> result<-list()
> for(i in 1:nrow(p)){
> result[[i]]<-sum((p[i,]-test)^2)
> }
>
> result_1<-unlist(result)
>
> p_1<-cbind(p,result_1)
>
> -------------------------------------------------------------------------------------------------------
>
> is there any efficient way to shorten the time and make same output?
>
>
> --
> View this message in context: 
> http://r.789695.n4.nabble.com/how-to-speed-up-the-inefficient-code-tp4478046p4478046.html
> Sent from the R help mailing list archive at Nabble.com.
>
> ______________________________________________
> R-help@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.



-- 
Jim Holtman
Data Munger Guru

What is the problem that you are trying to solve?
Tell me what you want to do, not how you want to do it.

______________________________________________
R-help@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.

Reply via email to