[BioC] Biostrings C interface :: example not compiling

Hervé Pagès hpages at fhcrc.org
Mon Apr 5 18:01:47 CEST 2010


Hi Erik,

Erik Wright wrote:
> 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;
> }

That's indeed the right way to "walk" on an XStringSet object at the
C level. Glad your figured it out!

H.

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

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