Re: [Rd] Producing different text formats in R
Thank you for your fast answer. It just works fine now. And apologies for attaching heavy files. Lluís. > > "Lluís" ==writes: > > Lluís> Dear all, > Lluís> I am facing a strange problem with text files formats. > > Lluís> I am currently using a C++ code named voro++ > (http://mathlbl.gov/voro++/). This code accepts text files with four columns: > > Lluís> > > Lluís> where id is an identification number and x,y,z are the coordinates > of a point in a 3D space. > > Lluís> The input file, name it myfile_cpp.txt, is generated by another > C++ code written by myself (named quadscheme.cpp). So far, these calculations > involve no R code and it works just fine. > > Lluís> However, now I am trying to replace my C++ code quadscheme.cpp by > a R function. The four columns (id,x,y,z) are produced in a matrix or Data > Frame and then saved in a file myfile_r.txt using write.table(). For example > using the following function: > > Lluís> quadscheme <- function(window, ntile) { > Lluís> # Creates a grid of points in a 3D orthohedron. > Lluís> # First point lies at the (mix,miny,miz) corner of the volume > and the last one at (maxx,maxy,maxz) > Lluís> # window: vector. Contains the minimum and maximum values of a > 3D orthohedron > Lluís> # window <- c(minx, maxx, miny, maxy, minz, maxz) > Lluís> # ntile: vector. Number of points per dimension minus one. We > manually add a extra row of points per dimension > Lluís> # ntile <- c(nstepx, nstepy, nstepz) > Lluís> M <- prod(ntile+1) > Lluís> mat <- matrix(NA,M,4) > Lluís> mat[,1] <- 1:M # id column > > Lluís> # step length per dimension > Lluís> hi <- (window[2] - window[1])/ntile[1] > Lluís> hj <- (window[4] - window[3])/ntile[2] > Lluís> hk <- (window[6] - window[5])/ntile[3] > > Lluís> c <- 1 > Lluís> for(i in 0:ntile[1]) { > Lluís> x <- i*hi + window[1] > Lluís> for(j in 0:ntile[2]) { > Lluís> y <- hj*j + window[3] > Lluís> for(k in 0:ntile[3]) { > Lluís> z <- k*hk + window[5] > Lluís> mat[c,2:4] <- c(x,y,z) # Add a new point to the grid > Lluís> c <- c + 1 > Lluís> } > Lluís> } > Lluís> } > Lluís> write.table(mat, file="myfile_r.txt", row.names=FALSE, > col.names=FALSE) > Lluís> } > > Lluís> And then calling: > > >> window <- c(18, 43, 171, 196, 95, 102) > >> ntile <- c(100,100,28) > >> quadscheme(window, ntile) > > Lluís> I see no difference between both myfile_*.txt files, > Lluís> one is created with C++ and the other one with > Lluís> R. However, function voro++ do not accept the later one > Lluís> (created with R and saved with write.table). I've also > Lluís> noted that voro++ usually accepts R generated files > Lluís> when they are small enough, but it accepts all C++ > Lluís> generated files, regardless the size. > > Lluís> I know this is more a C++ than a R question, but may be > Lluís> you can help me as well. I suspect that even if both > Lluís> files are *.txt they have some differences that I > Lluís> cannot see. Is there any way in R to produce different > Lluís> kinds of txt files? Like binary instead of text files? > Lluís> Could this be the problem? > > Lluís> I attach two identical files, one produced by C++ > Lluís> (myfile_cpp.txt) and another one by the previous R > Lluís> function (myfile_r.txt). I attach as well the C++ code > Lluís> used to generate myfile_cpp.txt. > > Lluís> Thank you in advance, > > Lluís> Lluís Hurtado-Gil > > In your R file, scientific notation is used: > > R: > 9 26.5 174.5 96.5 > 1e+05 26.5 174.5 96.75 > 11 26.5 174.5 97 > > cpp: > 9 26.5 174.5 96.5 > 10 26.5 174.5 96.75 > 11 26.5 174.5 97 > > Try setting options(scipen = 20) before you write the > file in R. > > > > -- > Enrico Schumann > Lucerne, Switzerland > http://enricoschumann.net > __ R-devel@r-project.org mailing list https://stat.ethz.ch/mailman/listinfo/r-devel
Re: [Rd] Producing different text formats in R
Lluís, You sent a 8+ mb file to a (I presume) 1000+ subscribers of this list. That is not generally a good idea, and I am surprised this got past the mailman software which (usually) filters at 100k (and for a reason). In the future, please consider uploading the file somewhere (GitHub gists are easy) and send a link. We also often talk about "minimally complete verifiable examples" (mcve) and the minimal is there for a reason. Thanks for your consideration, Dirk -- http://dirk.eddelbuettel.com | @eddelbuettel | e...@debian.org __ R-devel@r-project.org mailing list https://stat.ethz.ch/mailman/listinfo/r-devel
Re: [Rd] Producing different text formats in R
> "Lluís" ==writes: Lluís> Dear all, Lluís> I am facing a strange problem with text files formats. Lluís> I am currently using a C++ code named voro++ (http://math.lbl.gov/voro++/). This code accepts text files with four columns: Lluís> Lluís> where id is an identification number and x,y,z are the coordinates of a point in a 3D space. Lluís> The input file, name it myfile_cpp.txt, is generated by another C++ code written by myself (named quadscheme.cpp). So far, these calculations involve no R code and it works just fine. Lluís> However, now I am trying to replace my C++ code quadscheme.cpp by a R function. The four columns (id,x,y,z) are produced in a matrix or Data Frame and then saved in a file myfile_r.txt using write.table(). For example using the following function: Lluís> quadscheme <- function(window, ntile) { Lluís> # Creates a grid of points in a 3D orthohedron. Lluís> # First point lies at the (mix,miny,miz) corner of the volume and the last one at (maxx,maxy,maxz) Lluís> # window: vector. Contains the minimum and maximum values of a 3D orthohedron Lluís> # window <- c(minx, maxx, miny, maxy, minz, maxz) Lluís> # ntile: vector. Number of points per dimension minus one. We manually add a extra row of points per dimension Lluís> # ntile <- c(nstepx, nstepy, nstepz) Lluís> M <- prod(ntile+1) Lluís> mat <- matrix(NA,M,4) Lluís> mat[,1] <- 1:M # id column Lluís> # step length per dimension Lluís> hi <- (window[2] - window[1])/ntile[1] Lluís> hj <- (window[4] - window[3])/ntile[2] Lluís> hk <- (window[6] - window[5])/ntile[3] Lluís> c <- 1 Lluís> for(i in 0:ntile[1]) { Lluís> x <- i*hi + window[1] Lluís> for(j in 0:ntile[2]) { Lluís> y <- hj*j + window[3] Lluís> for(k in 0:ntile[3]) { Lluís> z <- k*hk + window[5] Lluís> mat[c,2:4] <- c(x,y,z) # Add a new point to the grid Lluís> c <- c + 1 Lluís> } Lluís> } Lluís> } Lluís> write.table(mat, file="myfile_r.txt", row.names=FALSE, col.names=FALSE) Lluís> } Lluís> And then calling: >> window <- c(18, 43, 171, 196, 95, 102) >> ntile <- c(100,100,28) >> quadscheme(window, ntile) Lluís> I see no difference between both myfile_*.txt files, Lluís> one is created with C++ and the other one with Lluís> R. However, function voro++ do not accept the later one Lluís> (created with R and saved with write.table). I've also Lluís> noted that voro++ usually accepts R generated files Lluís> when they are small enough, but it accepts all C++ Lluís> generated files, regardless the size. Lluís> I know this is more a C++ than a R question, but may be Lluís> you can help me as well. I suspect that even if both Lluís> files are *.txt they have some differences that I Lluís> cannot see. Is there any way in R to produce different Lluís> kinds of txt files? Like binary instead of text files? Lluís> Could this be the problem? Lluís> I attach two identical files, one produced by C++ Lluís> (myfile_cpp.txt) and another one by the previous R Lluís> function (myfile_r.txt). I attach as well the C++ code Lluís> used to generate myfile_cpp.txt. Lluís> Thank you in advance, Lluís> Lluís Hurtado-Gil In your R file, scientific notation is used: R: 9 26.5 174.5 96.5 1e+05 26.5 174.5 96.75 11 26.5 174.5 97 cpp: 9 26.5 174.5 96.5 10 26.5 174.5 96.75 11 26.5 174.5 97 Try setting options(scipen = 20) before you write the file in R. -- Enrico Schumann Lucerne, Switzerland http://enricoschumann.net __ R-devel@r-project.org mailing list https://stat.ethz.ch/mailman/listinfo/r-devel