Actually, <br><font color="#3333ff">Rcpp::NumericMatrix output(x_s + x_k - 1, y_s + y_k - 1); output.fill(0.0);</font><br>should do it.<br><br>Perhaps the following could be added to Matrix.h?<br><br><font color="#3333ff">template &lt;typename U&gt; Matrix( const int&amp; nrows_, const int&amp; ncols, const U&amp; u) : <br>
         VECTOR( Dimension( nrows_, ncols ) ), <br>         nrows(nrows_)<br>     { fill(u); }</font><br>for completeness? Or does this conflict with the other constructor?<br><br>On Wed, Jan 4, 2012 at 3:44 PM, Yasir Suhail &lt;<a href="mailto:yusuhail@gmail.com">yusuhail@gmail.com</a>&gt; wrote:<br>
&gt;<br>&gt; From <a href="http://dirk.eddelbuettel.com/code/rcpp/html/Matrix_8h_source.html#l00058">http://dirk.eddelbuettel.com/code/rcpp/html/Matrix_8h_source.html#l00058</a><br>&gt; The constructor for matrix is Matrix(nrow, ncol, iterator), there is no constructor it seems for initializing the default value. So your problem is <br>
&gt; Rcpp::NumericMatrix output(x_s + x_k - 1, y_s + y_k - 1, 0.0);<br>&gt; should be<br>&gt; Rcpp::NumericMatrix output(x_s + x_k - 1, y_s + y_k - 1);<br>&gt;<br>&gt; and then a separate loop for initialization. I&#39;d like to know if someone knows of another way of initialization.<br>
&gt;<br>&gt; yasir<br>&gt;<br>&gt; On Wed, Jan 4, 2012 at 3:13 PM, Hadley Wickham &lt;<a href="mailto:hadley@rice.edu">hadley@rice.edu</a>&gt; wrote:<br>&gt;&gt;<br>&gt;&gt; Hi all,<br>&gt;&gt;<br>&gt;&gt; As I&#39;m (slowly) getting more proficient with Rcpp, I&#39;m attempting to<br>
&gt;&gt; write a 2d convolution function. My latest attempt:<br>&gt;&gt;<br>&gt;&gt; convolve2d &lt;- cxxfunction(signature(sampleS = &quot;numeric&quot;, kernelS =<br>&gt;&gt; &quot;numeric&quot;), plugin = &quot;Rcpp&quot;, &#39;<br>
&gt;&gt;    Rcpp::NumericMatrix sample(sampleS), kernel(kernelS);<br>&gt;&gt;    int x_s = sample.nrow(), x_k = kernel.nrow();<br>&gt;&gt;    int y_s = sample.ncol(), y_k = kernel.ncol();<br>&gt;&gt;<br>&gt;&gt;    Rcpp::NumericMatrix output(x_s + x_k - 1, y_s + y_k - 1, 0.0);<br>
&gt;&gt;    for (int row = 0; row &lt; x_s; row++) {<br>&gt;&gt;      for (int col = 0; col &lt; y_s; col++) {<br>&gt;&gt;        for (int i = 0; i &lt; x_k; i++) {<br>&gt;&gt;          for (int j = 0; j &lt; y_k; j++) {<br>
&gt;&gt;            output(row, col) += sample(row + i, col + j) * kernel(i, j);<br>&gt;&gt;          }<br>&gt;&gt;        }<br>&gt;&gt;      }<br>&gt;&gt;    }<br>&gt;&gt;    return output;<br>&gt;&gt; &#39;)<br>&gt;&gt;<br>
&gt;&gt; fails to compile with a not very informative error message:<br>&gt;&gt;<br>&gt;&gt; Error in compileCode(f, code, language = language, verbose = verbose) :<br>&gt;&gt;  Compilation ERROR, function(s)/method(s) not created!<br>
&gt;&gt; /usr/include/c++/4.2.1/bits/stl_iterator_base_types.h: In<br>&gt;&gt; instantiation of ‘std::iterator_traits&lt;double&gt;’:<br>&gt;&gt; /Users/hadley/R/Rcpp/include/Rcpp/internal/wrap.h:346:   instantiated<br>&gt;&gt; from ‘SEXPREC* Rcpp::internal::range_wrap(InputIterator,<br>
&gt;&gt; InputIterator) [with InputIterator = double]’<br>&gt;&gt; /Users/hadley/R/Rcpp/include/Rcpp/internal/wrap.h:847:   instantiated<br>&gt;&gt; from ‘SEXPREC* Rcpp::wrap(InputIterator, InputIterator) [with<br>&gt;&gt; InputIterator = double]’<br>
&gt;&gt; /Users/hadley/R/Rcpp/include/Rcpp/vector/Vector.h:418:   instantiated<br>&gt;&gt; from ‘void Rcpp::Vector&lt;RTYPE&gt;::assign(InputIterator, InputIterator)<br>&gt;&gt; [with InputIterator = double, int RTYPE = 14]’<br>
&gt;&gt; /Users/hadley/R/Rcpp/include/Rcpp/vector/Vector.h:249:   instantiated<br>&gt;&gt; from ‘Rcpp::Vector&lt;RTYPE&gt;::Vector(InputIterator, InputIterator) [with<br>&gt;&gt; InputIterator = double, int RTYPE = 14]’<br>
&gt;&gt; /Users/hadley/R/Rcpp/include/Rcpp/vector/Matrix.h:60:   instantiated<br>&gt;&gt; from ‘Rcpp::Matrix&lt;RTYPE&gt;::Matrix(const i<br>&gt;&gt;<br>&gt;&gt; How can I use that error message to figure out what I&#39;m doing wrong?<br>
&gt;&gt;<br>&gt;&gt; I&#39;m also wondering if since I&#39;m using () to index, should I be using 1<br>&gt;&gt; based indices?  I think that&#39;s the difference for () and [] for<br>&gt;&gt; vectors, but I might just be confused.<br>
&gt;&gt;<br>&gt;&gt; (Of course a separate question is whether this code actually<br>&gt;&gt; implements 2d convolution or not, but it should hopefully be close)<br>&gt;&gt;<br>&gt;&gt; Hadley<br>&gt;&gt;<br>&gt;&gt;<br>&gt;&gt; --<br>
&gt;&gt; Assistant Professor / Dobelman Family Junior Chair<br>&gt;&gt; Department of Statistics / Rice University<br>&gt;&gt; <a href="http://had.co.nz/">http://had.co.nz/</a><br>&gt;&gt; _______________________________________________<br>
&gt;&gt; Rcpp-devel mailing list<br>&gt;&gt; <a href="mailto:Rcpp-devel@lists.r-forge.r-project.org">Rcpp-devel@lists.r-forge.r-project.org</a><br>&gt;&gt; <a href="https://lists.r-forge.r-project.org/cgi-bin/mailman/listinfo/rcpp-devel">https://lists.r-forge.r-project.org/cgi-bin/mailman/listinfo/rcpp-devel</a><br>
&gt;<br>&gt;<br>