[BioC] Biostrings C interface :: example not compiling

Erik Wright eswright at wisc.edu
Mon Apr 5 14:18:56 CEST 2010


Hi Hervé & Chuck,

Thanks for the help to get me started with the C interface.

I have eventually figured out how to get the example working with functions in the Biostrings interface rather than the IR_Ranges interface:

SEXP print_XString_bytes(SEXP x)
{
	cachedXStringSet x_set;
	cachedCharSeq x_i;
	int i, j, x_length;
	
	x_set = cache_XStringSet(x);
	
	// number of XStrings in the XStringSet
	x_length = get_cachedXStringSet_length(&x_set);
	
	for (i = 0; i < x_length; i++) {
		// extract XString i from the XStringSet
		x_i = get_cachedXStringSet_elt(&x_set, i);
		
		// print each character along the XString
		for (j = 0; j < x_i.length; j++)
			Rprintf("%c", DNAdecode(x_i.seq[j]));
		
		Rprintf("\n");
	}
	return R_NilValue;
}

Cheers,
Erik




On Apr 5, 2010, at 1:39 AM, Hervé Pagès wrote:

> Hi Erik,
> 
> Erik Wright wrote:
>> Hello again,
>> It looks like my problem is that the function listed in the example code, "cache_XRaw()", is deprecated.
> 
> cache_XRaw() has been moved to the IRanges package a long time ago
> and has since then been part of the IRanges C interface. The example
> given in the header of Biostrings_interface.h needs to be updated to
> reflect this change. Thanks for catching this and sorry for the
> confusion.
> 
> For your GoneFISHing package that means that you need to do steps a.,
> b. and c. for both, Biostrings and IRanges. For step d., add:
> 
> #include "IRanges_interface.h"
> 
> just before
> 
> #include "Biostrings_interface.h"
> 
> Then try to compile again and let me know if that still doesn't work.
> 
>> Is there any source of information about how to use the functions listed in Biostrings_interface.h?
> 
> There is nothing like that and no plans at the moment to formally
> document the C-level interfaces. For now the best way to learn
> about these functions is to see how they are used in
> IRanges/Biostrings themselves (they are prefixed with an
> underscore when they are used from within the package where
> they are defined). The authors have made some efforts to use consistent
> naming, and, I think, a clean and consistent C coding style across
> the 2 packages so hopefully the code is not too hard to understand
> (some parts of the code are tricky but most are not). They will be
> happy to help you with any specific questions you have.
> 
> Cheers,
> H.
> 
>> Thanks again,
>> Erik
>> On Apr 2, 2010, at 11:00 AM, Erik Wright wrote:
>>> Hello all,
>>> 
>>> I am trying to interface Biostrings from C for the first time.  I followed the example given in the header of Biostrings_interface.h to the letter (quite literally).  In step "e" I paste the example function into myFile.c, register it as a .Call entry point and compile with R CMD CHECK.  I get the following errors:
>>> 
>>> myFile.c:13: warning: implicit declaration of function Œcache_XRaw‚
>>> myFile.c:13: error: incompatible types in assignment
>>> myFile.c:14: error: ŒcachedCharSeq‚ has no member named Œelts‚
>>> myFile.c:14: error: ŒcachedCharSeq‚ has no member named Œnelt‚
>>> 
>>> Based on the error, it seems like I still don't have access to any of the Biostrings variable definitions.  I have tried everything that I can think of, so I am quite stuck.  Does anyone know what I am doing incorrectly?  I have pasted myFile.c below for reference.
>>> 
>>> Thanks!,
>>> Erik
>>> 
>>> 
>>> 
>>> 
>>> //myFile.c
>>> 
>>> #include <Rdefines.h>
>>> #include <R_ext/Rdynload.h>
>>> #include <stdio.h>
>>> #include <stdlib.h>
>>> #include "Biostrings_interface.h"
>>> 
>>> SEXP print_XString_bytes(SEXP xstring)
>>> {
>>> 	cachedCharSeq x;
>>> 	int i;
>>> 	const char *x_char;
>>> 	
>>> 	x = cache_XRaw(xstring);
>>> 	for (i = 0, x_char = x.elts; i < x.nelt; i++, x_char++)
>>> 		Rprintf("%x ", *x_char);
>>> 	Rprintf("\n");
>>> 	return R_NilValue;
>>> }
>>> 
>>> /*
>>> * -- REGISTRATION OF THE .Call ENTRY POINTS ---
>>> */
>>> static const R_CallMethodDef callMethods[] = {
>>> 	{"print_XString_bytes", (DL_FUNC) &print_XString_bytes, 1},
>>> 	{NULL, NULL, 0}
>>> };
>>> 
>>> void R_init_GoneFISHing(DllInfo *info)
>>> {
>>> 	R_registerRoutines(info, NULL, callMethods, NULL, NULL);
>>> }
>>> 	[[alternative HTML version deleted]]
>>> 
>>> _______________________________________________
>>> Bioconductor mailing list
>>> Bioconductor at stat.math.ethz.ch
>>> https://stat.ethz.ch/mailman/listinfo/bioconductor
>>> Search the archives: http://news.gmane.org/gmane.science.biology.informatics.conductor
>> _______________________________________________
>> Bioconductor mailing list
>> Bioconductor at stat.math.ethz.ch
>> https://stat.ethz.ch/mailman/listinfo/bioconductor
>> Search the archives: http://news.gmane.org/gmane.science.biology.informatics.conductor
> 
> -- 
> Hervé Pagès
> 
> Program in Computational Biology
> Division of Public Health Sciences
> Fred Hutchinson Cancer Research Center
> 1100 Fairview Ave. N, M2-B876
> P.O. Box 19024
> Seattle, WA 98109-1024
> 
> E-mail: hpages at fhcrc.org
> Phone:  (206) 667-5791
> Fax:    (206) 667-1319



More information about the Bioconductor mailing list