[Rcpp-devel] Compile Error with Rcpp sugar all

Benjamin Ward (ENV) B.Ward at uea.ac.uk
Wed May 15 10:19:40 CEST 2013


Hi all,

I'm having problem with some code I hope you can help illuminate:

I've written some code originally to speed up and R function, but now really for my own education:

It's supposed to remove all columns of a matrix containing identical values ( a big one!):

#include <Rcpp.h>
#include <vector>

using namespace Rcpp;

// [[Rcpp::export]]
CharacterMatrix reduce_sequences(CharacterMatrix completeDNA)
{
  std::vector<int> informativeSites;          // Start vector to record informative sites I.e columns which are not all identical…
  for(int i = 0; i < completeDNA.ncol(); i++)      // For each column of the matrix…
  {
    CharacterVector bpsite(completeDNA.nrow());     //Make a vector to contain the column.
    for(int n = 0; n < completeDNA.nrow(); n++)
    {
      bpsite[n] = completeDNA(n,i);  // Fill in the vector with the matrix column.
    }
    if(any(bpsite != bpsite[0])) informativeSites.push_back(i);     //If values are not all identical, push the column index onto the vector.
  }

  CharacterMatrix cutDNA(3, informativeSites.size());     //Make new matrix to contain only all the columns which are not identical.
  for(int i = 0; i < informativeSites.size(); i++)
  {
    for(int n = 0; n < cutDNA.nrow(); n++)
    {
      cutDNA(n,i) = completeDNA(n,informativeSites[i]);    // Use loops to fill in the new matrix.
    }
  }
  return cutDNA;     //Return the new matrix
}


However I seem to be having issues with the line:
if(any(bpsite != bpsite[0])) informativeSites.push_back(i);

I think it is to do with the any() function, the errors are reported from the header file "SingleLogicalResult.h" and involve contorting bool. At least that's as far as I can dechiper the errors.

The console output below for full details. Is there a way for me to fix this?

Thanks,
Ben W.

> Rcpp::sourceCpp('reduceseq.cpp')
/Library/Frameworks/R.framework/Versions/2.15/Resources/library/Rcpp/include/Rcpp/sugar/logical/SingleLogicalResult.h: In instantiation of ‘Rcpp::sugar::conversion_to_bool_is_forbidden<false>’:
/Library/Frameworks/R.framework/Versions/2.15/Resources/library/Rcpp/include/Rcpp/sugar/logical/SingleLogicalResult.h:74:   instantiated from ‘Rcpp::sugar::SingleLogicalResult<NA, T>::operator bool() [with bool NA = true, T = Rcpp::sugar::Any<true, Rcpp::sugar::Comparator_With_One_Value<16, Rcpp::sugar::not_equal<16>, true, Rcpp::Vector<16> > >]’
reduceseq.cpp:17:   instantiated from here
/Library/Frameworks/R.framework/Versions/2.15/Resources/library/Rcpp/include/Rcpp/sugar/logical/SingleLogicalResult.h:36: error: invalid use of incomplete type ‘struct Rcpp::sugar::forbidden_conversion<false>’
/Library/Frameworks/R.framework/Versions/2.15/Resources/library/Rcpp/include/Rcpp/sugar/logical/SingleLogicalResult.h:29: error: declaration of ‘struct Rcpp::sugar::forbidden_conversion<false>’
/Library/Frameworks/R.framework/Versions/2.15/Resources/library/Rcpp/include/Rcpp/sugar/operators/Comparator_With_One_Value.h: In member function ‘int Rcpp::sugar::Comparator_With_One_Value<RTYPE, Operator, NA, T>::rhs_is_not_na(int) const [with int RTYPE = 16, Operator = Rcpp::sugar::not_equal<16>, bool NA = true, T = Rcpp::Vector<16>]’:
/Library/Frameworks/R.framework/Versions/2.15/Resources/library/Rcpp/include/Rcpp/sugar/operators/Comparator_With_One_Value.h:38:   instantiated from ‘Rcpp::sugar::Comparator_With_One_Value<RTYPE, Operator, NA, T>::Comparator_With_One_Value(const Rcpp::VectorBase<RTYPE, LHS_NA, LHS_T>&, typename Rcpp::traits::storage_type<RTYPE>::type) [with int RTYPE = 16, Operator = Rcpp::sugar::not_equal<16>, bool NA = true, T = Rcpp::Vector<16>]’
/Library/Frameworks/R.framework/Versions/2.15/Resources/library/Rcpp/include/Rcpp/sugar/operators/logical_operators__Vector__primitive.h:266:   instantiated from ‘Rcpp::sugar::Comparator_With_One_Value<RTYPE, Rcpp::sugar::not_equal<RTYPE>, NA, T> operator!=(const Rcpp::VectorBase<RTYPE, NA, VECTOR>&, typename Rcpp::traits::storage_type<RTYPE>::type) [with int RTYPE = 16, bool NA = true, T = Rcpp::Vector<16>]’
reduceseq.cpp:17:   instantiated from here
/Library/Frameworks/R.framework/Versions/2.15/Resources/library/Rcpp/include/Rcpp/sugar/operators/Comparator_With_One_Value.h:59: error: operands to ?: have different types ‘SEXPREC*’ and ‘int’
/Library/Frameworks/R.framework/Versions/2.15/Resources/library/Rcpp/include/Rcpp/sugar/operators/Comparator_With_One_Value.h: In member function ‘int Rcpp::sugar::Comparator_With_One_Value<RTYPE, Operator, NA, T>::rhs_is_na(int) const [with int RTYPE = 16, Operator = Rcpp::sugar::not_equal<16>, bool NA = true, T = Rcpp::Vector<16>]’:
/Library/Frameworks/R.framework/Versions/2.15/Resources/library/Rcpp/include/Rcpp/sugar/operators/Comparator_With_One_Value.h:38:   instantiated from ‘Rcpp::sugar::Comparator_With_One_Value<RTYPE, Operator, NA, T>::Comparator_With_One_Value(const Rcpp::VectorBase<RTYPE, LHS_NA, LHS_T>&, typename Rcpp::traits::storage_type<RTYPE>::type) [with int RTYPE = 16, Operator = Rcpp::sugar::not_equal<16>, bool NA = true, T = Rcpp::Vector<16>]’
/Library/Frameworks/R.framework/Versions/2.15/Resources/library/Rcpp/include/Rcpp/sugar/operators/logical_operators__Vector__primitive.h:266:   instantiated from ‘Rcpp::sugar::Comparator_With_One_Value<RTYPE, Rcpp::sugar::not_equal<RTYPE>, NA, T> operator!=(const Rcpp::VectorBase<RTYPE, NA, VECTOR>&, typename Rcpp::traits::storage_type<RTYPE>::type) [with int RTYPE = 16, bool NA = true, T = Rcpp::Vector<16>]’
reduceseq.cpp:17:   instantiated from here
/Library/Frameworks/R.framework/Versions/2.15/Resources/library/Rcpp/include/Rcpp/sugar/operators/Comparator_With_One_Value.h:56: error: invalid conversion from ‘SEXPREC* const’ to ‘int’
make: *** [reduceseq.o] Error 1
g++ -arch x86_64 -I/Library/Frameworks/R.framework/Resources/include -I/Library/Frameworks/R.framework/Resources/include/x86_64 -DNDEBUG  -I/usr/local/include  -I"/Library/Frameworks/R.framework/Versions/2.15/Resources/library/Rcpp/include"    -fPIC  -g -O2  -c reduceseq.cpp -o reduceseq.o
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.r-forge.r-project.org/pipermail/rcpp-devel/attachments/20130515/76b89e89/attachment-0001.html>


More information about the Rcpp-devel mailing list