I suspect that rbind is responsible. Use list and append instead of rbind. At 
the end, combine elements of list by do.call(“rbind”, list).

> On 17 Sep 2016, at 15:05, Philippe de Rochambeau <phi...@free.fr> wrote:
> 
> Hello,
> the following function, which stores numeric values extracted from a binary 
> file, into an R matrix, is very slow, especially when the said file is 
> several MB in size.
> Should I rewrite the function in inline C or in C/C++ using Rcpp? If the 
> latter case is true, how do you « readBin »  in Rcpp (I’m a total Rcpp 
> newbie)?
> Many thanks.
> Best regards,
> phiroc
> 
> 
> -------------
> 
> # inputPath is something like 
> http://myintranet/getData?pathToFile=/usr/lib/xxx/yyy/data.bin 
> <http://myintranet/getData?pathToFile=/usr/lib/xxx/yyy/data.bin>
> 
> PLTreader <- function(inputPath){
>       URL <- file(inputPath, "rb")
>       PLT <- matrix(nrow=0, ncol=6)
>       compteurDePrints = 0
>       compteurDeLignes <- 0
>       maxiPrints = 5
>       displayData <- FALSE
>       while (TRUE) {
>               periodIndex <- readBin(URL, integer(), size=4, n=1, 
> endian="little") # int (4 bytes)
>               eventId <- readBin(URL, integer(), size=4, n=1, 
> endian="little") # int (4 bytes)
>               dword1 <- readBin(URL, integer(), size=4, signed=FALSE, n=1, 
> endian="little") # int
>               dword2 <- readBin(URL, integer(), size=4, signed=FALSE, n=1, 
> endian="little") # int
>               if (dword1 < 0) {
>                       dword1 = dword1 + 2^32-1;
>               }
>               eventDate = (dword2*2^32 + dword1)/1000
>               repNum <- readBin(URL, integer(), size=2, n=1, endian="little") 
> # short (2 bytes)
>               exp <- readBin(URL, numeric(), size=4, n=1, endian="little") # 
> float (4 bytes, strangely enough, would expect 8)
>               loss <- readBin(URL, numeric(), size=4, n=1, endian="little") # 
> float (4 bytes)
>               PLT <- rbind(PLT, c(periodIndex, eventId, eventDate, repNum, 
> exp, loss))
>       } # end while
>       return(PLT)
>       close(URL)
> }
> 
> ----------------
>       [[alternative HTML version deleted]]
> 
> ______________________________________________
> R-help@r-project.org mailing list -- To UNSUBSCRIBE and more, see
> 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.

______________________________________________
R-help@r-project.org mailing list -- To UNSUBSCRIBE and more, see
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