R 3.0.1 OS X Colleagues, I am experimenting with incorporating C code into R. After compiling the C code with: R CMD SHLIB -o FILE.so FILE.c and executing: dyn.load(?FILE.so?) (without any errors), I execute the following R functions in a terminal window: READSAS <- function(sourcefile) .C("readsas", sourcefile) OUTPUT <- READSAS("../SASFILES/sdrug.sas7bdat") R / C then reads a sas7bdat file and sends the contents to the terminal window. I expected OUTPUT to contain the text that appear in the terminal window (i.e., the contents of the file). But, that is not the case; OUTPUT contains: [[1]] [1] "../SASFILES/sdrug.sas7bdat" It is not clear to my how to capture that appears in the terminal window. Ultimately, I may need to modify the C code so that the output goes to a file, which I then read into R. However, it would be better if I did not need to modify the C code. Does anyone have any ideas of how I can capture this output within R? Dennis Dennis Fisher MD P < (The "P Less Than" Company) Phone: 1-866-PLessThan (1-866-753-7784) Fax: 1-866-PLessThan (1-866-753-7784) www.PLessThan.com
You really need to read the "Writing R Extensions" document. It warns you against performing I/O from C code linked to R. You probably ought to read the Posting Guide, also, since this question is off topic here --------------------------------------------------------------------------- Jeff Newmiller The ..... ..... Go Live... DCN:<jdnewmil at dcn.davis.ca.us> Basics: ##.#. ##.#. Live Go... Live: OO#.. Dead: OO#.. Playing Research Engineer (Solar/Batteries O.O#. #.O#. with /Software/Embedded Controllers) .OO#. .OO#. rocks...1k --------------------------------------------------------------------------- Sent from my phone. Please excuse my brevity. On February 2, 2014 5:09:33 PM PST, Dennis Fisher <fisher at plessthan.com> wrote:>R 3.0.1 >OS X > >Colleagues, > >I am experimenting with incorporating C code into R. After compiling >the C code with: > R CMD SHLIB -o FILE.so FILE.c >and executing: > dyn.load(?FILE.so?) >(without any errors), I execute the following R functions in a terminal >window: > READSAS <- function(sourcefile) .C("readsas", sourcefile) > OUTPUT <- READSAS("../SASFILES/sdrug.sas7bdat") >R / C then reads a sas7bdat file and sends the contents to the terminal >window. > >I expected OUTPUT to contain the text that appear in the terminal >window (i.e., the contents of the file). But, that is not the case; >OUTPUT contains: > [[1]] > [1] "../SASFILES/sdrug.sas7bdat" >It is not clear to my how to capture that appears in the terminal >window. > >Ultimately, I may need to modify the C code so that the output goes to >a file, which I then read into R. However, it would be better if I did >not need to modify the C code. >Does anyone have any ideas of how I can capture this output within R? > >Dennis > >Dennis Fisher MD >P < (The "P Less Than" Company) >Phone: 1-866-PLessThan (1-866-753-7784) >Fax: 1-866-PLessThan (1-866-753-7784) >www.PLessThan.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.
?sink 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. On Sun, Feb 2, 2014 at 8:09 PM, Dennis Fisher <fisher at plessthan.com> wrote:> R 3.0.1 > OS X > > Colleagues, > > I am experimenting with incorporating C code into R. After compiling the C code with: > R CMD SHLIB -o FILE.so FILE.c > and executing: > dyn.load("FILE.so") > (without any errors), I execute the following R functions in a terminal window: > READSAS <- function(sourcefile) .C("readsas", sourcefile) > OUTPUT <- READSAS("../SASFILES/sdrug.sas7bdat") > R / C then reads a sas7bdat file and sends the contents to the terminal window. > > I expected OUTPUT to contain the text that appear in the terminal window (i.e., the contents of the file). But, that is not the case; OUTPUT contains: > [[1]] > [1] "../SASFILES/sdrug.sas7bdat" > It is not clear to my how to capture that appears in the terminal window. > > Ultimately, I may need to modify the C code so that the output goes to a file, which I then read into R. However, it would be better if I did not need to modify the C code. > Does anyone have any ideas of how I can capture this output within R? > > Dennis > > Dennis Fisher MD > P < (The "P Less Than" Company) > Phone: 1-866-PLessThan (1-866-753-7784) > Fax: 1-866-PLessThan (1-866-753-7784) > www.PLessThan.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.
> READSAS <- function(sourcefile) .C("readsas", sourcefile) > OUTPUT <- READSAS("../SASFILES/sdrug.sas7bdat") > R / C then reads a sas7bdat file and sends the contents to the terminal window. > > I expected OUTPUT to contain the text that appear in the terminal window (i.e., the > contents of the file). But, that is not the case; OUTPUT contains: > [[1]] > [1] "../SASFILES/sdrug.sas7bdat"READSAS returns the value of .C(...), which returns a list of its arguments, perhaps modified by the C function you called. Thus you should expect READSAS to return the filename you gave it (in a list). Bill Dunlap TIBCO Software wdunlap tibco.com> -----Original Message----- > From: r-help-bounces at r-project.org [mailto:r-help-bounces at r-project.org] On Behalf > Of Dennis Fisher > Sent: Sunday, February 02, 2014 5:10 PM > To: r-help at stat.math.ethz.ch > Subject: [R] Capturing output of a C executable > > R 3.0.1 > OS X > > Colleagues, > > I am experimenting with incorporating C code into R. After compiling the C code with: > R CMD SHLIB -o FILE.so FILE.c > and executing: > dyn.load("FILE.so") > (without any errors), I execute the following R functions in a terminal window: > READSAS <- function(sourcefile) .C("readsas", sourcefile) > OUTPUT <- READSAS("../SASFILES/sdrug.sas7bdat") > R / C then reads a sas7bdat file and sends the contents to the terminal window. > > I expected OUTPUT to contain the text that appear in the terminal window (i.e., the > contents of the file). But, that is not the case; OUTPUT contains: > [[1]] > [1] "../SASFILES/sdrug.sas7bdat" > It is not clear to my how to capture that appears in the terminal window. > > Ultimately, I may need to modify the C code so that the output goes to a file, which I > then read into R. However, it would be better if I did not need to modify the C code. > Does anyone have any ideas of how I can capture this output within R? > > Dennis > > Dennis Fisher MD > P < (The "P Less Than" Company) > Phone: 1-866-PLessThan (1-866-753-7784) > Fax: 1-866-PLessThan (1-866-753-7784) > www.PLessThan.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.
On Feb 2, 2014, at 5:09 PM, Dennis Fisher wrote:> R 3.0.1 > OS X > > Colleagues, > > I am experimenting with incorporating C code into R. After compiling the C code with: > R CMD SHLIB -o FILE.so FILE.c > and executing: > dyn.load(?FILE.so?) > (without any errors), I execute the following R functions in a terminal window: > READSAS <- function(sourcefile) .C("readsas", sourcefile) > OUTPUT <- READSAS("../SASFILES/sdrug.sas7bdat") > R / C then reads a sas7bdat file and sends the contents to the terminal window. > > I expected OUTPUT to contain the text that appear in the terminal window (i.e., the contents of the file). But, that is not the case; OUTPUT contains: > [[1]] > [1] "../SASFILES/sdrug.sas7bdat" > It is not clear to my how to capture that appears in the terminal window. > > Ultimately, I may need to modify the C code so that the output goes to a file, which I then read into R. However, it would be better if I did not need to modify the C code. > Does anyone have any ideas of how I can capture this output within R?I wonder if this is a follow-up to the suggestion to look at ReadStat?: https://github.com/WizardMac/ReadStat I could imagine calling it from R but then directing results to a comma separated file along the lines of the second example. If my guess is correct, you might assist the R community and get valuable advice by posting your source and Makefile on R-devel. -- David.> > Dennis > > Dennis Fisher MD > P < (The "P Less Than" Company) > Phone: 1-866-PLessThan (1-866-753-7784) > Fax: 1-866-PLessThan (1-866-753-7784) > www.PLessThan.comDavid Winsemius Alameda, CA, USA
Dennis - The return value from .C will almost never be useful. If you want to bring results from the C environment into R, you need to do it by passing an address to .C which will receive the result. You may find this document helpful when interfacing R to C: http://www.stat.berkeley.edu/classes/s243/calling.pdf - Phil Spector Statistical Computing Facility Department of Statistics UC Berkeley spector at stat.berkeley.edu On Sun, 2 Feb 2014, Dennis Fisher wrote:> R 3.0.1 > OS X > > Colleagues, > > I am experimenting with incorporating C code into R. After compiling the C code with: > R CMD SHLIB -o FILE.so FILE.c > and executing: > dyn.load(?FILE.so?) > (without any errors), I execute the following R functions in a terminal window: > READSAS <- function(sourcefile) .C("readsas", sourcefile) > OUTPUT <- READSAS("../SASFILES/sdrug.sas7bdat") > R / C then reads a sas7bdat file and sends the contents to the terminal window. > > I expected OUTPUT to contain the text that appear in the terminal window (i.e., the contents of the file). But, that is not the case; OUTPUT contains: > [[1]] > [1] "../SASFILES/sdrug.sas7bdat" > It is not clear to my how to capture that appears in the terminal window. > > Ultimately, I may need to modify the C code so that the output goes to a file, which I then read into R. However, it would be better if I did not need to modify the C code. > Does anyone have any ideas of how I can capture this output within R? > > Dennis > > Dennis Fisher MD > P < (The "P Less Than" Company) > Phone: 1-866-PLessThan (1-866-753-7784) > Fax: 1-866-PLessThan (1-866-753-7784) > www.PLessThan.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. >