[R] Capturing output of a C executable

Duncan Murdoch murdoch.duncan at gmail.com
Tue Feb 4 13:29:57 CET 2014


On 14-02-03 5:44 PM, Phil Spector wrote:
> Dennis -
>       The return value from .C will almost never be useful.

Are you limiting this to the specific situation Dennis described, or 
making a more general claim?  The more general claim is clearly false.

Lots of packages return useful results using .C calls.  The idea is that 
all arguments to the C function are passed by reference and may be 
modified in place, so you just pass a vector to receive the result. 
That's equivalent to what you describe below, but I think it seems 
simpler, since "passing an address" from R sounds like an exotic 
operation, not the norm.

Duncan Murdoch

  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.
>>
>
>
>
> ______________________________________________
> 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.
>




More information about the R-help mailing list