[Rcpp-devel] Rccp code with vector and matrix inputs and matrix output

Petre Caraiani petre.caraiani at gmail.com
Fri Mar 28 12:51:59 CET 2014


Thank you for your quick reply!
I corrected the issue mentioned by you, but I get the same error.
It must be a beginner's issue.

The data is quite big, but this kind of output could be produced with any
random data, I guess.

Namely, using the Rcpp, I get Am as:
       [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10] [,11] [,12] [,13]
  [1,] 0.1825   NA   NA   NA   NA   NA   NA   NA   NA    NA    NA    NA
NA
  [2,] 0.2050   NA   NA   NA   NA   NA   NA   NA   NA    NA    NA    NA
NA
  [3,] 0.2083   NA   NA   NA   NA   NA   NA   NA   NA    NA    NA    NA
NA
  [4,] 0.2100   NA   NA   NA   NA   NA   NA   NA   NA    NA    NA    NA
NA
  [5,] 0.2133   NA   NA   NA   NA   NA   NA   NA   NA    NA    NA    NA
NA
  [6,] 0.2100   NA   NA   NA   NA   NA   NA   NA   NA    NA    NA    NA
NA
  [7,] 0.2025   NA   NA   NA   NA   NA   NA   NA   NA    NA    NA    NA
NA
  [8,] 0.2020   NA   NA   NA   NA   NA   NA   NA   NA    NA    NA    NA
NA
  [9,] 0.2025   NA   NA   NA   NA   NA   NA   NA   NA    NA    NA    NA
NA
 [10,] 0.1867   NA   NA   NA   NA   NA   NA   NA   NA    NA    NA    NA
NA
 [11,] 0.1867   NA   NA   NA   NA   NA   NA   NA   NA    NA    NA    NA
NA
 [12,] 0.1867   NA   NA   NA   NA   NA   NA   NA   NA    NA    NA    NA
NA
 [13,] 0.2000   NA   NA   NA   NA   NA   NA   NA   NA    NA    NA    NA
NA
 [14,]     NA   NA   NA   NA   NA   NA   NA   NA   NA    NA    NA    NA
NA
 and only NAs everywhere else

while I get this using the pure R code:
  X0   X0.1   X0.2   X0.3   X0.4   X0.5   X0.6   X0.7   X0.8   X0.9  X0.10
X0.11  X0.12
1  0.1811 0.1797 0.1784 0.1770 0.1757 0.1743 0.1730 0.1717 0.1704 0.1691
0.1678 0.1665 0.1653
2  0.2021 0.1993 0.1964 0.1937 0.1909 0.1883 0.1856 0.1830 0.1804 0.1779
0.1753 0.1729 0.1704
3  0.2044 0.2007 0.1969 0.1933 0.1897 0.1862 0.1828 0.1794 0.1760 0.1728
0.1696 0.1664 0.1634
4  0.2056 0.2013 0.1970 0.1929 0.1888 0.1849 0.1810 0.1772 0.1735 0.1698
0.1662 0.1627 0.1593
5  0.2085 0.2039 0.1993 0.1949 0.1905 0.1863 0.1821 0.1780 0.1741 0.1702
0.1664 0.1626 0.1590
6  0.2052 0.2006 0.1960 0.1915 0.1872 0.1829 0.1788 0.1747 0.1707 0.1669
0.1631 0.1594 0.1557
7  0.2004 0.1982 0.1961 0.1941 0.1920 0.1900 0.1880 0.1860 0.1840 0.1820
0.1801 0.1782 0.1763
8  0.1993 0.1967 0.1941 0.1916 0.1891 0.1866 0.1841 0.1817 0.1793 0.1769
0.1746 0.1723 0.1701
9  0.2005 0.1985 0.1966 0.1947 0.1928 0.1909 0.1890 0.1871 0.1853 0.1835
0.1817 0.1799 0.1781
10 0.1854 0.1840 0.1827 0.1814 0.1801 0.1788 0.1775 0.1763 0.1750 0.1737
0.1725 0.1713 0.1700
11 0.1855 0.1843 0.1831 0.1819 0.1807 0.1795 0.1784 0.1772 0.1761 0.1749
0.1738 0.1727 0.1715
12 0.1849 0.1831 0.1813 0.1795 0.1778 0.1760 0.1743 0.1726 0.1709 0.1692
0.1676 0.1659 0.1643
13 0.1964 0.1928 0.1893 0.1859 0.1826 0.1793 0.1760 0.1728 0.1697 0.1666
0.1636 0.1607 0.1578
14 0.1733 0.1716 0.1700 0.1683 0.1667 0.1651 0.1635 0.1619 0.1603 0.1587
0.1572 0.1557 0.1542
15 0.1814 0.1795 0.1777 0.1759 0.1741 0.1723 0.1705 0.1687 0.1670 0.1653
0.1636 0.1619 0.1602
16 0.1809 0.1784 0.1761 0.1737 0.1714 0.1691 0.1669 0.1646 0.1625 0.1603
0.1582 0.1560 0.1540
17 0.1828 0.1796 0.1765 0.1734 0.1704 0.1675 0.1646 0.1617 0.1589 0.1562
0.1534 0.1508 0.1482
18 0.1768 0.1744 0.1720 0.1696 0.1673 0.1651 0.1628 0.1606 0.1584 0.1563
0.1541 0.1520 0.1500
19 0.1537 0.1534 0.1531 0.1528 0.1525 0.1522 0.1519 0.1516 0.1513 0.1510
0.1507 0.1504 0.1501
20 0.1412 0.1425 0.1437 0.1450 0.1463 0.1476 0.1489 0.1502 0.1515 0.1529
0.1542 0.1556 0.1570
21 0.1460 0.1469 0.1479 0.1489 0.1498 0.1508 0.1518 0.1528 0.1538 0.1548
0.1558 0.1569 0.1579
22 0.1312 0.1323 0.1335 0.1347 0.1359 0.1372 0.1384 0.1396 0.1409 0.1421
0.1434 0.1447 0.1460
23 0.1555 0.1544 0.1532 0.1521 0.1509 0.1498 0.1487 0.1476 0.1465 0.1454
0.1443 0.1432 0.1421
24 0.1562 0.1556 0.1551 0.1546 0.1541 0.1535 0.1530 0.1525 0.1520 0.1515
0.1509 0.1504 0.1499
25 0.1561 0.1556 0.1551 0.1545 0.1540 0.1534 0.1529 0.1523 0.1518 0.1513
0.1507 0.1502 0.1497
26 0.1332 0.1338 0.1345 0.1351 0.1358 0.1365 0.1371 0.1378 0.1385 0.1392
0.1399 0.1406 0.1413
27 0.1548 0.1546 0.1544 0.1542 0.1540 0.1538 0.1536 0.1534 0.1532 0.1530
0.1528 0.1526 0.1524
28 0.1547 0.1543 0.1540 0.1537 0.1534 0.1530 0.1527 0.1524 0.1521 0.1517
0.1514 0.1511 0.1508
29 0.1552 0.1554 0.1556 0.1558 0.1560 0.1563 0.1565 0.1567 0.1569 0.1571
0.1573 0.1575 0.1577
30 0.1571 0.1575 0.1579 0.1583 0.1587 0.1591 0.1594 0.1598 0.1602 0.1606
0.1610 0.1614 0.1618
31 0.1571 0.1575 0.1580 0.1584 0.1588 0.1593 0.1597 0.1601 0.1605 0.1610
0.1614 0.1618 0.1623
32 0.1574 0.1581 0.1588 0.1594 0.1601 0.1608 0.1615 0.1622 0.1629 0.1636
0.1644 0.1651 0.1658
33 0.1580 0.1594 0.1607 0.1621 0.1635 0.1648 0.1662 0.1677 0.1691 0.1705
0.1720 0.1734 0.1749


On Fri, Mar 28, 2014 at 1:41 PM, Petre Caraiani <petre.caraiani at gmail.com>wrote:

> Thank you for your quick reply!
> I corrected the issue mentioned by you, but I get the same error.
> It must be a beginner's issue.
>
> The data is quite big, but this kind of output could be produced with any
> random data, I guess.
>
> Namely, using the Rcpp, I get Am as:
>        [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10] [,11] [,12] [,13]
>   [1,] 0.1825   NA   NA   NA   NA   NA   NA   NA   NA    NA    NA    NA
> NA
>   [2,] 0.2050   NA   NA   NA   NA   NA   NA   NA   NA    NA    NA    NA
> NA
>   [3,] 0.2083   NA   NA   NA   NA   NA   NA   NA   NA    NA    NA    NA
> NA
>   [4,] 0.2100   NA   NA   NA   NA   NA   NA   NA   NA    NA    NA    NA
> NA
>   [5,] 0.2133   NA   NA   NA   NA   NA   NA   NA   NA    NA    NA    NA
> NA
>   [6,] 0.2100   NA   NA   NA   NA   NA   NA   NA   NA    NA    NA    NA
> NA
>   [7,] 0.2025   NA   NA   NA   NA   NA   NA   NA   NA    NA    NA    NA
> NA
>   [8,] 0.2020   NA   NA   NA   NA   NA   NA   NA   NA    NA    NA    NA
> NA
>   [9,] 0.2025   NA   NA   NA   NA   NA   NA   NA   NA    NA    NA    NA
> NA
>  [10,] 0.1867   NA   NA   NA   NA   NA   NA   NA   NA    NA    NA    NA
> NA
>  [11,] 0.1867   NA   NA   NA   NA   NA   NA   NA   NA    NA    NA    NA
> NA
>  [12,] 0.1867   NA   NA   NA   NA   NA   NA   NA   NA    NA    NA    NA
> NA
>  [13,] 0.2000   NA   NA   NA   NA   NA   NA   NA   NA    NA    NA    NA
> NA
>  [14,]     NA   NA   NA   NA   NA   NA   NA   NA   NA    NA    NA    NA
> NA
>  and only NAs everywhere else
>
> while I get this using the pure R code:
>   X0   X0.1   X0.2   X0.3   X0.4   X0.5   X0.6   X0.7   X0.8   X0.9
> X0.10  X0.11  X0.12
> 1  0.1811 0.1797 0.1784 0.1770 0.1757 0.1743 0.1730 0.1717 0.1704 0.1691
> 0.1678 0.1665 0.1653
> 2  0.2021 0.1993 0.1964 0.1937 0.1909 0.1883 0.1856 0.1830 0.1804 0.1779
> 0.1753 0.1729 0.1704
> 3  0.2044 0.2007 0.1969 0.1933 0.1897 0.1862 0.1828 0.1794 0.1760 0.1728
> 0.1696 0.1664 0.1634
> 4  0.2056 0.2013 0.1970 0.1929 0.1888 0.1849 0.1810 0.1772 0.1735 0.1698
> 0.1662 0.1627 0.1593
> 5  0.2085 0.2039 0.1993 0.1949 0.1905 0.1863 0.1821 0.1780 0.1741 0.1702
> 0.1664 0.1626 0.1590
> 6  0.2052 0.2006 0.1960 0.1915 0.1872 0.1829 0.1788 0.1747 0.1707 0.1669
> 0.1631 0.1594 0.1557
> 7  0.2004 0.1982 0.1961 0.1941 0.1920 0.1900 0.1880 0.1860 0.1840 0.1820
> 0.1801 0.1782 0.1763
> 8  0.1993 0.1967 0.1941 0.1916 0.1891 0.1866 0.1841 0.1817 0.1793 0.1769
> 0.1746 0.1723 0.1701
> 9  0.2005 0.1985 0.1966 0.1947 0.1928 0.1909 0.1890 0.1871 0.1853 0.1835
> 0.1817 0.1799 0.1781
> 10 0.1854 0.1840 0.1827 0.1814 0.1801 0.1788 0.1775 0.1763 0.1750 0.1737
> 0.1725 0.1713 0.1700
> 11 0.1855 0.1843 0.1831 0.1819 0.1807 0.1795 0.1784 0.1772 0.1761 0.1749
> 0.1738 0.1727 0.1715
> 12 0.1849 0.1831 0.1813 0.1795 0.1778 0.1760 0.1743 0.1726 0.1709 0.1692
> 0.1676 0.1659 0.1643
> 13 0.1964 0.1928 0.1893 0.1859 0.1826 0.1793 0.1760 0.1728 0.1697 0.1666
> 0.1636 0.1607 0.1578
> 14 0.1733 0.1716 0.1700 0.1683 0.1667 0.1651 0.1635 0.1619 0.1603 0.1587
> 0.1572 0.1557 0.1542
> 15 0.1814 0.1795 0.1777 0.1759 0.1741 0.1723 0.1705 0.1687 0.1670 0.1653
> 0.1636 0.1619 0.1602
> 16 0.1809 0.1784 0.1761 0.1737 0.1714 0.1691 0.1669 0.1646 0.1625 0.1603
> 0.1582 0.1560 0.1540
> 17 0.1828 0.1796 0.1765 0.1734 0.1704 0.1675 0.1646 0.1617 0.1589 0.1562
> 0.1534 0.1508 0.1482
> 18 0.1768 0.1744 0.1720 0.1696 0.1673 0.1651 0.1628 0.1606 0.1584 0.1563
> 0.1541 0.1520 0.1500
> 19 0.1537 0.1534 0.1531 0.1528 0.1525 0.1522 0.1519 0.1516 0.1513 0.1510
> 0.1507 0.1504 0.1501
> 20 0.1412 0.1425 0.1437 0.1450 0.1463 0.1476 0.1489 0.1502 0.1515 0.1529
> 0.1542 0.1556 0.1570
> 21 0.1460 0.1469 0.1479 0.1489 0.1498 0.1508 0.1518 0.1528 0.1538 0.1548
> 0.1558 0.1569 0.1579
> 22 0.1312 0.1323 0.1335 0.1347 0.1359 0.1372 0.1384 0.1396 0.1409 0.1421
> 0.1434 0.1447 0.1460
> 23 0.1555 0.1544 0.1532 0.1521 0.1509 0.1498 0.1487 0.1476 0.1465 0.1454
> 0.1443 0.1432 0.1421
> 24 0.1562 0.1556 0.1551 0.1546 0.1541 0.1535 0.1530 0.1525 0.1520 0.1515
> 0.1509 0.1504 0.1499
> 25 0.1561 0.1556 0.1551 0.1545 0.1540 0.1534 0.1529 0.1523 0.1518 0.1513
> 0.1507 0.1502 0.1497
> 26 0.1332 0.1338 0.1345 0.1351 0.1358 0.1365 0.1371 0.1378 0.1385 0.1392
> 0.1399 0.1406 0.1413
> 27 0.1548 0.1546 0.1544 0.1542 0.1540 0.1538 0.1536 0.1534 0.1532 0.1530
> 0.1528 0.1526 0.1524
> 28 0.1547 0.1543 0.1540 0.1537 0.1534 0.1530 0.1527 0.1524 0.1521 0.1517
> 0.1514 0.1511 0.1508
> 29 0.1552 0.1554 0.1556 0.1558 0.1560 0.1563 0.1565 0.1567 0.1569 0.1571
> 0.1573 0.1575 0.1577
> 30 0.1571 0.1575 0.1579 0.1583 0.1587 0.1591 0.1594 0.1598 0.1602 0.1606
> 0.1610 0.1614 0.1618
> 31 0.1571 0.1575 0.1580 0.1584 0.1588 0.1593 0.1597 0.1601 0.1605 0.1610
> 0.1614 0.1618 0.1623
> 32 0.1574 0.1581 0.1588 0.1594 0.1601 0.1608 0.1615 0.1622 0.1629 0.1636
> 0.1644 0.1651 0.1658
> 33 0.1580 0.1594 0.1607 0.1621 0.1635 0.1648 0.1662 0.1677 0.1691 0.1705
> 0.1720 0.1734 0.1749
>
>
> On Fri, Mar 28, 2014 at 1:25 PM, Dirk Eddelbuettel <edd at debian.org> wrote:
>
>>
>> On 28 March 2014 at 10:30, Petre Caraiani wrote:
>> | Hello,
>> | The following code works well in R:
>> | attach(dataqtr)
>> |
>> | dataqtr <- data.table(dataqtr)
>> | setkeyv(dataqtr,c("gvkey","qtr"))
>> |
>> | vec_growth <- data.frame(0,0,0,0,0,0,0,0,0,0,0,0,0)
>> | vec_eps    <- data.frame(0,0,0,0,0,0,0,0,0,0,0,0,0)
>> |
>> | T <- 15
>> |
>> | for (i in 1:nrow(dataqtr)) {
>> |   vec_growth[i,] <- ( dataqtr[i,LTG] * exp(1:(T-2)/(T-1)*log( dataqtr
>> | [i,meanLTG] / dataqtr[i,LTG] )))
>> |
>> | }
>> |
>> |
>> | However I am not able to reproduce it using the following Rccp code:
>> |
>> | a<- dataqtr[,LTG]
>> | b<- dataqtr[,meanLTG]
>> |
>> | src <-'
>> |  Rcpp::NumericVector a(aa);
>> |  Rcpp::NumericVector b(bb);
>> |  Rcpp::NumericMatrix Am (A);
>> |  int n = a.size();
>> |  int m = b.size();
>> |  int T=15;
>> |
>> |  int nrows = Am.nrow();
>> |  int ncol  = Am.ncol();
>> |
>> |      for (int ii = 1; ii < nrows; ii++) {
>> |         for (int jj = 1; jj<ncol; jj++)  {
>> |         Am[ii,jj] =  a[jj] * exp(jj/(T-1)*log( b[jj] / a[jj] ));
>> |         }}
>> | return Am;
>> | '
>> | fun <- cxxfunction(signature(aa="numeric", bb="numeric",A="numeric"),
>> body =
>> | src, plugin="Rcpp")
>> |
>> | A<-matrix(data=NA,nrow=100,ncol=13)
>> | fun(a,b,A)
>> |
>> | I don't understand the error.
>>
>> What is the error you are getting and do not understand? Can you share it?
>>
>> Is it __build-time__ ?  Is it __run-time__ ?
>>
>> At a first glance both your for loops are wrong as indices in C and C++
>> have
>> to go from 0 to n-1, not 1 to n.
>>
>> Dirk
>>
>> --
>> Dirk Eddelbuettel | edd at debian.org | http://dirk.eddelbuettel.com
>>
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.r-forge.r-project.org/pipermail/rcpp-devel/attachments/20140328/dc3aad3d/attachment-0001.html>


More information about the Rcpp-devel mailing list