Help transfrom R to C

classic Classic list List threaded Threaded
3 messages Options
Reply | Threaded
Open this post in threaded view
|

Help transfrom R to C

pinusan
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
Reply | Threaded
Open this post in threaded view
|

Re: Help transfrom R to C

Thomas Lumley
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.
>
> ______________________________________________
> [hidden email] 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
[hidden email] University of Washington, Seattle

______________________________________________
[hidden email] 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 | Threaded
Open this post in threaded view
|

Re: Help transfrom R to C

Benilton Carvalho-2
In reply to this post by pinusan
maybe

inc.freqy <- sapply(unit.dist, function(x) rowSums( test <= x))

suffices?

b

On Mon, Apr 5, 2010 at 5:31 PM, pinusan <[hidden email]> 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.
>
> ______________________________________________
> [hidden email] 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.
>

______________________________________________
[hidden email] 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.