[Rcpp-devel] Rccp code with vector and matrix inputs and matrix output
Hadley Wickham
h.wickham at gmail.com
Fri Mar 28 15:30:48 CET 2014
I'd recommend:
a) using cppFunction instead of the older cxxfunction
b) creating an example that anyone can copy and paste out of their
email client and into R.
You are more likely to get helpful responses if you reduce the burden
on the potential helpers as much as possible
Hadley
On Fri, Mar 28, 2014 at 6:51 AM, 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: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
>>
>>
>
>
> _______________________________________________
> Rcpp-devel mailing list
> Rcpp-devel at lists.r-forge.r-project.org
> https://lists.r-forge.r-project.org/cgi-bin/mailman/listinfo/rcpp-devel
--
http://had.co.nz/
More information about the Rcpp-devel
mailing list