1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688 689 690 691 692 693 694 695 696 697 698 699 700 701 702 703 704 705 706 707 708 709 710 711 712 713 714 715 716 717 718 719 720 721 722 723 724 725 726 727 728 729 730 731 732 733 734 735 736 737 738 739 740 741 742 743 744 745 746 747 748 749 750 751 752 753 754 755 756 757 758 759 760 761 762 763 764 765 766 767 768 769 770 771 772 773 774 775 776 777 778 779 780 781 782 783 784 785 786 787 788 789 790 791 792 793 794 795 796 797 798 799 800 801 802 803 804 805 806 807 808 809 810 811 812 813 814 815 816 817 818 819 820 821 822 823 824 825 826 827 828 829 830 831 832 833 834 835 836 837 838 839 840 841 842 843 844 845 846 847 848 849 850 851 852 853 854 855 856 857 858 859 860 861 862 863 864 865 866 867 868 869 870 871 872 873 874 875 876 877 878 879 880 881 882 883 884 885 886 887 888 889 890 891 892 893 894 895 896 897 898 899 900 901 902 903 904 905 906 907 908 909 910 911 912 913 914 915 916 917 918 919 920 921 922 923 924 925 926 927 928 929 930 931 932 933 934 935 936 937 938 939 940 941 942 943 944 945 946 947 948 949 950 951 952 953 954 955 956 957 958 959 960 961 962 963 964 965 966 967 968 969 970 971 972 973 974 975 976 977 978 979 980 981 982 983 984 985 986 987 988 989 990 991 992 993 994 995 996 997 998 999 1000 1001 1002 1003 1004 1005 1006 1007 1008 1009 1010 1011 1012 1013 1014 1015 1016 1017 1018 1019 1020 1021 1022 1023 1024 1025 1026 1027 1028 1029 1030 1031 1032 1033 1034 1035 1036 1037 1038 1039 1040 1041 1042 1043 1044 1045 1046 1047 1048 1049 1050 1051 1052 1053 1054 1055 1056 1057 1058 1059 1060 1061 1062 1063 1064 1065 1066 1067 1068 1069 1070 1071 1072 1073 1074 1075 1076 1077 1078 1079 1080 1081 1082 1083 1084 1085 1086 1087 1088 1089 1090 1091 1092 1093 1094 1095 1096 1097 1098 1099 1100 1101 1102 1103 1104 1105 1106 1107 1108 1109 1110 1111 1112 1113 1114 1115 1116 1117 1118 1119 1120 1121 1122 1123 1124 1125 1126 1127 1128 1129 1130 1131 1132 1133 1134 1135 1136 1137 1138 1139 1140 1141 1142 1143 1144 1145 1146 1147 1148 1149 1150 1151 1152 1153 1154 1155 1156 1157 1158 1159 1160 1161 1162 1163 1164 1165 1166 1167 1168 1169 1170 1171 1172 1173 1174 1175 1176 1177 1178 1179 1180 1181 1182 1183 1184 1185 1186 1187 1188 1189 1190 1191 1192 1193 1194 1195 1196 1197 1198 1199 1200 1201 1202 1203 1204 1205 1206 1207 1208 1209 1210 1211 1212 1213 1214 1215 1216 1217 1218 1219 1220 1221 1222 1223 1224 1225 1226 1227 1228 1229 1230 1231 1232 1233 1234 1235 1236 1237 1238 1239 1240 1241 1242 1243 1244 1245 1246 1247 1248 1249 1250 1251 1252 1253 1254 1255 1256 1257 1258 1259 1260 1261 1262 1263 1264 1265 1266 1267 1268 1269 1270 1271 1272 1273 1274 1275 1276 1277 1278 1279 1280 1281 1282 1283 1284 1285 1286 1287 1288 1289 1290 1291 1292 1293 1294 1295 1296 1297 1298 1299 1300 1301 1302 1303 1304 1305 1306 1307 1308 1309 1310 1311 1312 1313 1314 1315 1316 1317 1318 1319 1320 1321 1322 1323 1324 1325 1326 1327 1328 1329 1330 1331 1332 1333 1334 1335 1336 1337 1338 1339 1340 1341 1342 1343 1344 1345 1346 1347 1348 1349 1350 1351 1352 1353 1354 1355 1356 1357 1358 1359 1360 1361 1362 1363 1364 1365 1366 1367 1368 1369 1370 1371 1372 1373 1374 1375 1376 1377 1378 1379 1380 1381 1382 1383 1384 1385 1386 1387 1388 1389 1390 1391 1392 1393 1394 1395 1396 1397 1398 1399 1400 1401 1402 1403 1404 1405 1406 1407 1408 1409 1410 1411 1412 1413 1414 1415 1416 1417 1418 1419 1420 1421 1422 1423 1424 1425 1426 1427 1428 1429 1430 1431 1432 1433 1434 1435 1436 1437 1438 1439 1440 1441 1442 1443 1444 1445 1446 1447 1448 1449 1450 1451 1452 1453 1454 1455 1456 1457 1458 1459 1460 1461 1462 1463 1464 1465 1466 1467 1468 1469 1470 1471 1472 1473 1474 1475 1476 1477 1478 1479 1480 1481 1482 1483 1484 1485 1486 1487 1488 1489 1490 1491 1492 1493 1494 1495 1496 1497 1498 1499 1500 1501 1502 1503 1504 1505 1506 1507 1508 1509 1510 1511 1512 1513 1514 1515 1516 1517 1518 1519 1520 1521 1522 1523 1524 1525 1526 1527 1528 1529 1530 1531 1532 1533 1534 1535 1536 1537 1538 1539 1540 1541 1542 1543 1544 1545 1546 1547 1548 1549 1550 1551 1552 1553 1554 1555 1556 1557 1558 1559 1560 1561 1562 1563 1564 1565 1566 1567 1568 1569 1570 1571 1572 1573 1574 1575 1576 1577 1578 1579 1580 1581 1582 1583 1584 1585 1586 1587 1588 1589 1590 1591 1592 1593 1594 1595 1596 1597 1598 1599 1600 1601 1602 1603 1604 1605 1606 1607 1608 1609 1610 1611 1612 1613 1614 1615 1616 1617 1618 1619 1620 1621 1622 1623 1624 1625 1626 1627 1628 1629 1630 1631 1632 1633 1634 1635 1636 1637 1638 1639 1640 1641 1642 1643 1644 1645 1646 1647 1648 1649 1650 1651 1652 1653 1654 1655 1656 1657 1658 1659 1660 1661 1662 1663 1664 1665 1666 1667 1668 1669 1670 1671 1672 1673 1674 1675 1676 1677 1678 1679 1680 1681 1682 1683 1684 1685 1686 1687 1688 1689 1690 1691 1692 1693 1694 1695 1696 1697 1698 1699 1700 1701 1702 1703 1704 1705 1706 1707 1708 1709 1710 1711 1712 1713 1714 1715 1716 1717 1718 1719 1720 1721 1722 1723 1724 1725 1726 1727 1728 1729 1730 1731 1732 1733 1734 1735 1736 1737 1738 1739 1740 1741 1742 1743 1744 1745 1746 1747 1748 1749 1750 1751 1752 1753 1754 1755 1756 1757 1758 1759 1760 1761 1762 1763 1764 1765 1766 1767 1768 1769 1770 1771 1772 1773 1774 1775 1776 1777 1778 1779 1780 1781 1782 1783 1784 1785 1786 1787 1788 1789 1790 1791 1792 1793 1794 1795 1796 1797 1798 1799 1800 1801 1802 1803 1804 1805 1806 1807 1808 1809 1810 1811 1812 1813 1814 1815 1816 1817 1818 1819 1820 1821 1822 1823 1824 1825 1826 1827 1828 1829 1830 1831 1832 1833 1834 1835 1836 1837 1838 1839 1840 1841 1842 1843 1844 1845 1846 1847 1848 1849 1850 1851 1852 1853 1854 1855 1856 1857 1858 1859 1860 1861 1862 1863 1864 1865 1866 1867 1868 1869 1870 1871 1872 1873 1874 1875 1876 1877 1878 1879 1880 1881 1882 1883 1884 1885 1886 1887 1888 1889 1890 1891 1892 1893 1894 1895 1896 1897 1898 1899 1900 1901 1902 1903 1904 1905 1906 1907 1908 1909 1910 1911 1912 1913 1914 1915 1916 1917 1918 1919 1920 1921 1922 1923 1924 1925 1926 1927 1928 1929 1930 1931 1932 1933 1934 1935 1936 1937 1938 1939 1940 1941 1942 1943 1944 1945 1946 1947 1948 1949 1950 1951 1952 1953 1954 1955 1956 1957 1958 1959 1960 1961 1962 1963 1964 1965 1966 1967 1968 1969 1970 1971 1972 1973 1974 1975 1976 1977 1978 1979 1980 1981 1982 1983 1984 1985 1986 1987 1988 1989 1990 1991 1992 1993 1994 1995 1996 1997 1998 1999 2000 2001 2002 2003 2004 2005 2006 2007 2008 2009 2010 2011 2012 2013 2014 2015 2016 2017 2018 2019 2020 2021 2022 2023 2024 2025 2026 2027 2028 2029 2030 2031 2032 2033 2034 2035 2036 2037 2038 2039 2040 2041 2042 2043 2044 2045 2046 2047 2048 2049 2050 2051 2052 2053 2054 2055 2056 2057 2058 2059 2060 2061 2062 2063 2064 2065 2066 2067 2068 2069 2070 2071 2072 2073 2074 2075 2076 2077 2078 2079 2080 2081 2082 2083 2084 2085 2086 2087 2088 2089 2090 2091 2092 2093 2094 2095 2096 2097 2098 2099 2100 2101 2102 2103 2104 2105 2106 2107 2108 2109 2110 2111 2112 2113 2114 2115 2116 2117 2118 2119 2120 2121 2122 2123 2124 2125 2126 2127 2128 2129 2130 2131 2132 2133 2134 2135 2136 2137 2138 2139 2140 2141 2142 2143 2144 2145 2146 2147 2148 2149 2150 2151 2152 2153 2154 2155 2156 2157 2158 2159 2160 2161 2162 2163 2164 2165 2166 2167 2168 2169 2170 2171 2172 2173 2174 2175 2176 2177 2178 2179 2180 2181 2182 2183 2184 2185 2186 2187 2188 2189 2190 2191 2192 2193 2194 2195 2196 2197 2198 2199 2200 2201 2202 2203 2204 2205 2206 2207 2208 2209 2210 2211 2212 2213 2214 2215 2216 2217 2218 2219 2220 2221 2222 2223 2224 2225 2226 2227 2228 2229 2230 2231 2232 2233 2234 2235 2236 2237 2238 2239 2240 2241 2242 2243 2244 2245 2246 2247 2248 2249 2250 2251 2252 2253 2254 2255 2256 2257 2258 2259 2260 2261 2262 2263 2264 2265 2266 2267 2268 2269 2270 2271 2272 2273 2274 2275 2276 2277 2278 2279 2280 2281 2282 2283 2284 2285 2286 2287 2288 2289 2290 2291 2292 2293 2294 2295 2296 2297 2298 2299 2300 2301 2302 2303 2304 2305 2306 2307 2308 2309 2310 2311 2312 2313 2314 2315 2316 2317 2318 2319 2320 2321 2322 2323 2324 2325 2326 2327 2328 2329 2330 2331 2332 2333 2334 2335 2336 2337 2338 2339 2340 2341 2342 2343 2344 2345 2346 2347 2348 2349 2350 2351 2352 2353 2354 2355 2356 2357 2358 2359 2360 2361 2362 2363 2364 2365 2366 2367 2368 2369 2370 2371 2372 2373 2374 2375 2376 2377 2378 2379 2380 2381 2382 2383 2384 2385 2386 2387 2388 2389 2390 2391 2392 2393 2394 2395 2396 2397 2398 2399 2400 2401 2402 2403 2404 2405 2406 2407 2408 2409 2410 2411 2412 2413 2414 2415 2416 2417 2418 2419 2420 2421 2422 2423 2424 2425 2426 2427 2428 2429 2430 2431 2432 2433 2434 2435 2436 2437 2438 2439 2440 2441 2442 2443 2444 2445 2446 2447 2448 2449 2450 2451 2452 2453 2454 2455 2456 2457 2458 2459 2460 2461 2462 2463 2464 2465 2466 2467 2468 2469 2470 2471 2472 2473 2474 2475 2476 2477 2478 2479 2480 2481 2482 2483 2484 2485 2486 2487 2488 2489 2490 2491 2492 2493 2494 2495 2496 2497 2498 2499 2500 2501 2502 2503 2504 2505 2506 2507 2508 2509 2510 2511 2512 2513 2514 2515 2516 2517 2518 2519 2520 2521 2522 2523 2524 2525 2526 2527 2528 2529 2530 2531 2532 2533 2534 2535 2536 2537 2538 2539 2540 2541 2542 2543 2544 2545 2546 2547 2548 2549 2550 2551 2552 2553 2554 2555 2556 2557 2558 2559 2560 2561 2562 2563 2564 2565 2566 2567 2568 2569 2570 2571 2572 2573 2574 2575 2576 2577 2578 2579 2580 2581 2582 2583 2584 2585 2586 2587 2588 2589 2590 2591 2592 2593 2594 2595 2596 2597 2598 2599 2600 2601 2602 2603 2604 2605 2606 2607 2608 2609 2610 2611 2612 2613 2614 2615 2616 2617 2618 2619 2620 2621 2622 2623 2624 2625 2626 2627 2628 2629 2630 2631 2632 2633 2634 2635 2636 2637 2638 2639 2640 2641 2642 2643 2644 2645 2646 2647 2648 2649 2650 2651 2652 2653 2654 2655 2656 2657 2658 2659 2660 2661 2662 2663 2664 2665 2666 2667 2668 2669 2670 2671 2672 2673 2674 2675 2676 2677 2678 2679 2680 2681 2682 2683 2684 2685 2686 2687 2688 2689 2690 2691 2692 2693 2694 2695 2696 2697 2698 2699 2700 2701 2702 2703 2704 2705 2706 2707 2708 2709 2710 2711 2712 2713 2714 2715 2716 2717 2718 2719 2720 2721 2722 2723 2724 2725 2726 2727 2728 2729 2730 2731 2732 2733 2734 2735 2736 2737 2738 2739 2740 2741 2742 2743 2744 2745 2746 2747 2748 2749 2750 2751 2752 2753 2754 2755 2756 2757 2758 2759 2760 2761 2762 2763 2764 2765 2766 2767 2768 2769 2770 2771 2772 2773 2774 2775 2776 2777 2778 2779 2780 2781 2782 2783 2784 2785 2786 2787 2788 2789 2790 2791 2792 2793 2794 2795 2796 2797 2798 2799 2800 2801 2802 2803 2804 2805 2806 2807 2808 2809 2810 2811 2812 2813 2814 2815 2816 2817 2818 2819 2820 2821 2822 2823 2824 2825 2826 2827 2828 2829 2830 2831 2832 2833 2834 2835 2836 2837 2838 2839 2840 2841 2842 2843 2844 2845 2846 2847 2848 2849 2850 2851 2852 2853 2854 2855 2856 2857 2858 2859 2860 2861 2862 2863 2864 2865 2866 2867 2868 2869 2870 2871 2872 2873 2874 2875 2876 2877 2878 2879 2880 2881 2882 2883 2884 2885 2886 2887 2888 2889 2890 2891 2892 2893 2894 2895 2896 2897 2898 2899 2900 2901 2902 2903 2904 2905 2906 2907 2908 2909 2910 2911 2912 2913 2914 2915 2916 2917 2918 2919 2920 2921 2922 2923 2924 2925 2926 2927 2928 2929 2930 2931 2932 2933 2934 2935 2936 2937 2938 2939 2940 2941 2942 2943 2944 2945 2946 2947 2948 2949 2950 2951 2952 2953 2954 2955 2956 2957 2958 2959 2960 2961 2962 2963 2964 2965 2966 2967 2968 2969 2970 2971 2972 2973 2974 2975 2976 2977 2978 2979 2980 2981 2982 2983 2984 2985 2986 2987 2988 2989 2990 2991 2992 2993 2994 2995 2996 2997 2998 2999 3000 3001 3002 3003 3004 3005 3006 3007 3008 3009 3010 3011 3012 3013 3014 3015 3016 3017 3018 3019 3020 3021 3022 3023 3024 3025 3026 3027 3028 3029 3030 3031 3032 3033 3034 3035 3036 3037 3038 3039 3040 3041 3042 3043 3044 3045 3046 3047 3048 3049 3050 3051 3052 3053 3054 3055 3056 3057 3058 3059 3060 3061 3062 3063 3064 3065 3066 3067 3068 3069 3070 3071 3072 3073 3074 3075 3076 3077 3078 3079 3080 3081 3082 3083 3084 3085 3086 3087 3088 3089 3090 3091 3092 3093 3094 3095 3096 3097 3098 3099 3100 3101 3102 3103 3104 3105 3106 3107 3108 3109 3110 3111 3112 3113 3114 3115 3116 3117 3118 3119 3120 3121 3122 3123 3124 3125 3126 3127 3128 3129 3130 3131 3132 3133 3134 3135 3136 3137 3138 3139 3140 3141 3142 3143 3144 3145 3146 3147 3148 3149 3150 3151 3152 3153 3154 3155 3156 3157 3158 3159 3160 3161 3162 3163 3164 3165 3166 3167 3168 3169 3170 3171 3172 3173 3174 3175 3176 3177 3178 3179 3180 3181 3182 3183 3184 3185 3186 3187 3188 3189 3190 3191 3192 3193 3194 3195 3196 3197 3198 3199 3200 3201 3202 3203 3204 3205 3206 3207 3208 3209 3210 3211 3212 3213 3214 3215 3216 3217 3218 3219 3220 3221 3222 3223 3224 3225 3226 3227 3228 3229 3230 3231 3232 3233 3234 3235 3236 3237 3238 3239 3240 3241 3242 3243 3244 3245 3246 3247 3248 3249 3250 3251 3252 3253 3254 3255 3256 3257 3258 3259 3260 3261 3262 3263 3264 3265 3266 3267 3268 3269 3270 3271 3272 3273 3274 3275 3276 3277 3278 3279 3280 3281 3282 3283 3284 3285 3286 3287 3288 3289 3290 3291 3292 3293 3294 3295 3296 3297 3298 3299 3300 3301 3302 3303 3304 3305 3306 3307 3308 3309 3310 3311 3312 3313 3314 3315 3316 3317 3318 3319 3320 3321 3322 3323 3324 3325 3326 3327 3328 3329 3330 3331 3332 3333 3334 3335 3336 3337 3338 3339 3340 3341 3342 3343 3344 3345 3346 3347 3348 3349 3350 3351 3352 3353 3354 3355 3356 3357 3358 3359 3360 3361 3362 3363 3364 3365 3366 3367 3368 3369 3370 3371 3372 3373 3374 3375 3376 3377 3378 3379 3380 3381 3382 3383 3384 3385 3386 3387 3388 3389 3390 3391 3392 3393 3394 3395 3396 3397 3398 3399 3400 3401 3402 3403 3404 3405 3406 3407 3408 3409 3410 3411 3412 3413 3414 3415 3416 3417 3418 3419 3420 3421 3422 3423 3424 3425 3426 3427 3428 3429 3430 3431 3432 3433 3434 3435 3436 3437 3438 3439 3440 3441 3442 3443 3444 3445 3446 3447 3448 3449 3450 3451 3452 3453 3454 3455 3456 3457 3458 3459 3460 3461 3462 3463 3464 3465 3466 3467 3468 3469 3470 3471 3472 3473 3474 3475 3476 3477 3478 3479 3480 3481 3482 3483 3484 3485 3486 3487 3488 3489 3490 3491 3492 3493 3494 3495 3496 3497 3498 3499 3500 3501 3502 3503 3504 3505 3506 3507 3508 3509 3510 3511 3512 3513 3514 3515 3516 3517 3518 3519 3520 3521 3522 3523 3524 3525 3526 3527 3528 3529 3530 3531 3532 3533 3534 3535 3536 3537 3538 3539 3540 3541 3542 3543 3544 3545 3546 3547 3548 3549 3550 3551 3552 3553 3554 3555 3556 3557 3558 3559 3560 3561 3562 3563 3564 3565 3566 3567 3568 3569 3570 3571 3572 3573 3574 3575 3576 3577 3578 3579 3580 3581 3582 3583 3584 3585 3586 3587 3588 3589 3590 3591 3592 3593 3594 3595 3596 3597 3598 3599 3600 3601 3602 3603 3604 3605 3606 3607 3608 3609 3610 3611 3612 3613 3614 3615 3616 3617 3618 3619 3620 3621 3622 3623 3624 3625 3626 3627 3628 3629 3630 3631 3632 3633 3634 3635 3636 3637 3638 3639 3640 3641 3642 3643 3644 3645 3646 3647 3648 3649 3650 3651 3652 3653 3654 3655 3656 3657 3658 3659 3660 3661 3662 3663 3664 3665 3666 3667 3668 3669 3670 3671 3672 3673 3674 3675 3676 3677 3678 3679 3680 3681 3682 3683 3684 3685 3686 3687 3688 3689 3690 3691 3692 3693 3694 3695 3696 3697 3698 3699 3700 3701 3702 3703 3704 3705 3706 3707 3708 3709 3710 3711 3712 3713 3714 3715 3716 3717 3718 3719 3720 3721 3722 3723 3724 3725 3726 3727 3728 3729 3730 3731 3732 3733 3734 3735 3736 3737 3738 3739 3740 3741 3742 3743 3744 3745 3746 3747 3748 3749 3750 3751 3752 3753 3754 3755 3756 3757 3758 3759 3760 3761 3762 3763 3764 3765 3766 3767 3768 3769 3770 3771 3772 3773 3774 3775 3776 3777 3778 3779 3780 3781 3782 3783 3784 3785 3786 3787 3788 3789 3790 3791 3792 3793 3794 3795 3796 3797 3798 3799 3800 3801 3802 3803 3804 3805 3806 3807 3808 3809 3810 3811 3812 3813 3814 3815 3816 3817 3818 3819 3820 3821 3822 3823 3824 3825 3826 3827 3828 3829 3830 3831 3832 3833 3834 3835 3836 3837 3838 3839 3840 3841 3842 3843 3844 3845 3846 3847 3848 3849 3850 3851 3852 3853 3854 3855 3856 3857 3858 3859 3860 3861 3862 3863 3864 3865 3866 3867 3868 3869 3870 3871 3872 3873 3874 3875 3876 3877 3878 3879 3880 3881 3882 3883 3884 3885 3886 3887 3888 3889 3890 3891 3892 3893 3894 3895 3896 3897 3898 3899 3900 3901 3902 3903 3904 3905 3906 3907 3908 3909 3910 3911 3912 3913 3914 3915 3916 3917 3918 3919 3920 3921 3922 3923 3924 3925 3926 3927 3928 3929 3930 3931 3932 3933 3934 3935 3936 3937 3938 3939 3940 3941 3942 3943 3944 3945 3946 3947 3948 3949 3950 3951 3952 3953 3954 3955 3956 3957 3958 3959 3960 3961 3962 3963 3964 3965 3966 3967 3968 3969 3970 3971 3972 3973 3974 3975 3976 3977 3978 3979 3980 3981 3982 3983 3984 3985 3986 3987 3988 3989 3990 3991 3992 3993 3994 3995 3996 3997 3998 3999 4000 4001 4002 4003 4004 4005 4006 4007 4008 4009 4010 4011 4012 4013 4014 4015 4016 4017 4018 4019 4020 4021 4022 4023 4024 4025 4026 4027 4028 4029 4030 4031 4032 4033 4034 4035 4036 4037 4038 4039 4040 4041 4042 4043 4044 4045 4046 4047 4048 4049 4050 4051 4052 4053 4054 4055 4056 4057 4058 4059 4060 4061 4062 4063 4064 4065 4066 4067 4068 4069 4070 4071 4072 4073 4074 4075 4076 4077 4078 4079 4080 4081 4082 4083 4084 4085 4086 4087 4088 4089 4090 4091 4092 4093 4094 4095 4096 4097 4098 4099 4100 4101 4102 4103 4104 4105 4106 4107 4108 4109 4110 4111 4112 4113 4114 4115 4116 4117 4118 4119 4120 4121 4122 4123 4124 4125 4126 4127 4128 4129 4130 4131 4132 4133 4134 4135 4136 4137 4138 4139 4140 4141 4142 4143 4144 4145 4146 4147 4148 4149 4150 4151 4152 4153 4154 4155 4156 4157 4158 4159 4160 4161 4162 4163 4164 4165 4166 4167 4168 4169 4170 4171 4172 4173 4174 4175 4176 4177 4178 4179 4180 4181 4182 4183 4184 4185 4186 4187 4188 4189 4190 4191 4192 4193 4194 4195 4196 4197 4198 4199 4200 4201 4202 4203 4204 4205 4206 4207 4208 4209 4210 4211 4212 4213 4214 4215 4216 4217 4218 4219 4220 4221 4222 4223 4224 4225 4226 4227 4228 4229 4230 4231 4232 4233 4234 4235 4236 4237 4238 4239 4240 4241 4242 4243 4244 4245 4246 4247 4248 4249 4250 4251 4252 4253 4254 4255 4256 4257 4258 4259 4260 4261 4262 4263 4264 4265 4266 4267 4268 4269 4270 4271 4272 4273 4274 4275 4276 4277 4278 4279 4280 4281 4282 4283 4284 4285 4286 4287 4288 4289 4290 4291 4292 4293 4294 4295 4296 4297 4298 4299 4300 4301 4302 4303 4304 4305 4306 4307 4308 4309 4310 4311 4312 4313 4314 4315 4316 4317 4318 4319 4320 4321 4322 4323 4324 4325 4326 4327 4328 4329 4330 4331 4332 4333 4334 4335 4336 4337 4338 4339 4340 4341 4342 4343 4344 4345 4346 4347 4348 4349 4350 4351 4352 4353 4354 4355 4356 4357 4358 4359 4360 4361 4362 4363 4364 4365 4366 4367 4368 4369 4370 4371 4372 4373 4374 4375 4376 4377 4378 4379 4380 4381 4382 4383 4384 4385 4386 4387 4388 4389 4390 4391 4392 4393 4394 4395 4396 4397 4398 4399 4400 4401 4402 4403 4404 4405 4406 4407 4408 4409 4410 4411 4412 4413 4414 4415 4416 4417 4418 4419 4420 4421 4422 4423 4424 4425 4426 4427 4428 4429 4430 4431 4432 4433 4434 4435 4436 4437 4438 4439 4440 4441 4442 4443 4444 4445 4446 4447 4448 4449 4450 4451 4452 4453 4454 4455 4456 4457 4458 4459 4460 4461 4462 4463 4464 4465 4466 4467 4468 4469 4470 4471 4472 4473 4474 4475 4476 4477 4478 4479 4480 4481 4482 4483 4484 4485 4486 4487 4488 4489 4490 4491 4492 4493 4494 4495 4496 4497 4498 4499 4500 4501 4502 4503 4504 4505 4506 4507 4508 4509 4510 4511 4512 4513 4514 4515 4516 4517 4518 4519 4520 4521 4522 4523 4524 4525 4526 4527 4528 4529 4530 4531 4532 4533 4534 4535 4536 4537 4538 4539 4540 4541 4542 4543 4544 4545 4546 4547 4548 4549 4550 4551 4552 4553 4554 4555 4556 4557 4558 4559 4560 4561 4562 4563 4564 4565 4566 4567 4568 4569 4570 4571 4572 4573 4574 4575 4576 4577 4578 4579 4580 4581 4582 4583 4584 4585 4586 4587 4588 4589 4590 4591 4592 4593 4594 4595 4596 4597 4598 4599 4600 4601 4602 4603 4604 4605 4606 4607 4608 4609 4610 4611 4612 4613 4614 4615 4616 4617 4618 4619 4620 4621 4622 4623 4624 4625 4626 4627 4628 4629 4630 4631 4632 4633 4634 4635 4636 4637 4638 4639 4640 4641 4642 4643 4644 4645 4646 4647 4648 4649 4650 4651 4652 4653 4654 4655 4656 4657 4658 4659 4660 4661 4662 4663 4664 4665 4666 4667 4668 4669 4670 4671 4672 4673 4674 4675 4676 4677 4678 4679 4680 4681 4682 4683 4684 4685 4686 4687 4688 4689 4690 4691 4692 4693 4694 4695 4696 4697 4698 4699 4700 4701 4702 4703 4704 4705 4706 4707 4708 4709 4710 4711 4712 4713 4714 4715 4716 4717 4718 4719 4720 4721 4722 4723 4724 4725 4726 4727 4728 4729 4730 4731 4732 4733 4734 4735 4736 4737 4738 4739 4740 4741 4742 4743 4744 4745 4746 4747 4748 4749 4750 4751 4752 4753 4754 4755 4756 4757 4758 4759 4760 4761 4762 4763 4764 4765 4766 4767 4768 4769 4770 4771 4772 4773 4774 4775 4776 4777 4778 4779 4780 4781 4782 4783 4784 4785 4786 4787 4788 4789 4790 4791 4792 4793 4794 4795 4796 4797 4798 4799 4800 4801 4802 4803 4804 4805 4806 4807 4808 4809 4810 4811 4812 4813 4814 4815 4816 4817 4818 4819 4820 4821 4822 4823 4824 4825 4826 4827 4828 4829 4830 4831 4832 4833 4834 4835 4836 4837 4838 4839 4840 4841 4842 4843 4844 4845 4846 4847 4848 4849 4850 4851 4852 4853 4854 4855 4856 4857 4858 4859 4860 4861 4862 4863 4864 4865 4866 4867 4868 4869 4870 4871 4872 4873 4874 4875 4876 4877 4878 4879 4880 4881 4882 4883 4884 4885 4886 4887 4888 4889 4890 4891 4892 4893 4894 4895 4896 4897 4898 4899 4900 4901 4902 4903 4904 4905 4906 4907 4908 4909 4910 4911 4912 4913 4914 4915 4916 4917 4918 4919 4920 4921 4922 4923 4924 4925 4926 4927 4928 4929 4930 4931 4932 4933 4934 4935 4936 4937 4938 4939 4940 4941 4942 4943 4944 4945 4946 4947 4948 4949 4950 4951 4952 4953 4954 4955 4956 4957 4958 4959 4960 4961 4962 4963 4964 4965 4966 4967 4968 4969 4970 4971 4972 4973 4974 4975 4976 4977 4978 4979 4980 4981 4982 4983 4984 4985 4986 4987 4988 4989 4990 4991 4992 4993 4994 4995 4996 4997 4998 4999 5000 5001 5002 5003 5004 5005 5006 5007 5008 5009 5010 5011 5012 5013 5014 5015 5016 5017 5018 5019 5020 5021 5022 5023 5024 5025 5026 5027 5028 5029 5030 5031 5032 5033 5034 5035 5036 5037 5038 5039 5040 5041 5042 5043 5044 5045 5046 5047 5048 5049 5050 5051 5052 5053 5054 5055 5056 5057 5058 5059 5060 5061 5062 5063 5064 5065 5066 5067 5068 5069 5070 5071 5072 5073 5074 5075 5076 5077 5078 5079 5080 5081 5082 5083 5084 5085 5086 5087 5088 5089 5090 5091 5092 5093 5094 5095 5096 5097 5098 5099 5100 5101 5102 5103 5104 5105 5106 5107 5108 5109 5110 5111 5112 5113 5114 5115 5116 5117 5118 5119 5120 5121 5122 5123 5124 5125 5126 5127 5128 5129 5130 5131 5132 5133 5134 5135 5136 5137 5138 5139 5140 5141 5142 5143 5144 5145 5146 5147 5148 5149 5150 5151 5152 5153 5154 5155 5156 5157 5158 5159 5160 5161 5162 5163 5164 5165 5166 5167 5168 5169 5170 5171 5172 5173 5174 5175 5176 5177 5178 5179 5180 5181 5182 5183 5184 5185 5186 5187 5188 5189 5190 5191 5192 5193 5194 5195 5196 5197 5198 5199 5200 5201 5202 5203 5204 5205 5206 5207 5208 5209 5210 5211 5212 5213 5214 5215 5216 5217 5218 5219 5220 5221 5222 5223 5224 5225 5226 5227 5228 5229 5230 5231 5232 5233 5234 5235 5236 5237 5238 5239 5240 5241 5242 5243 5244 5245 5246 5247 5248 5249 5250 5251 5252 5253 5254 5255 5256 5257 5258 5259 5260 5261 5262 5263 5264 5265 5266 5267 5268 5269 5270 5271 5272 5273 5274 5275 5276 5277 5278 5279 5280 5281 5282 5283 5284 5285 5286 5287 5288 5289 5290 5291 5292 5293 5294 5295 5296 5297 5298 5299 5300 5301 5302 5303 5304 5305 5306 5307 5308 5309 5310 5311 5312 5313 5314 5315 5316 5317 5318 5319 5320 5321 5322 5323 5324 5325 5326 5327 5328 5329 5330 5331 5332 5333 5334 5335 5336 5337 5338 5339 5340 5341 5342 5343 5344 5345 5346 5347 5348 5349 5350 5351 5352 5353 5354 5355 5356 5357 5358 5359 5360 5361 5362 5363 5364 5365 5366 5367 5368 5369 5370 5371 5372 5373 5374 5375 5376 5377 5378 5379 5380 5381 5382 5383 5384 5385 5386 5387 5388 5389 5390 5391 5392 5393 5394 5395 5396 5397 5398 5399 5400 5401 5402 5403 5404 5405 5406 5407 5408 5409 5410 5411 5412 5413 5414 5415 5416 5417 5418 5419 5420 5421 5422 5423 5424 5425 5426 5427 5428 5429 5430 5431 5432 5433 5434 5435 5436 5437 5438 5439 5440 5441 5442 5443 5444 5445 5446 5447 5448 5449 5450 5451 5452 5453 5454 5455 5456 5457 5458 5459 5460 5461 5462 5463 5464 5465 5466 5467 5468 5469 5470 5471 5472 5473 5474 5475 5476 5477 5478 5479 5480 5481 5482 5483 5484 5485 5486 5487 5488 5489 5490 5491 5492 5493 5494 5495 5496 5497 5498 5499 5500 5501 5502 5503 5504 5505 5506 5507 5508 5509 5510 5511 5512 5513 5514 5515 5516 5517 5518 5519 5520 5521 5522 5523 5524 5525 5526 5527 5528 5529 5530 5531 5532 5533 5534 5535 5536 5537 5538 5539 5540 5541 5542 5543 5544 5545 5546 5547 5548 5549 5550 5551 5552 5553 5554 5555 5556 5557 5558 5559 5560 5561 5562 5563 5564 5565 5566 5567 5568 5569 5570 5571 5572 5573 5574 5575 5576 5577 5578 5579 5580 5581 5582 5583 5584 5585 5586 5587 5588 5589 5590 5591 5592 5593 5594 5595 5596 5597 5598 5599 5600 5601 5602 5603 5604 5605 5606 5607 5608 5609 5610 5611 5612 5613 5614 5615 5616 5617 5618 5619 5620 5621 5622 5623 5624 5625 5626 5627 5628 5629 5630 5631 5632 5633 5634 5635 5636 5637 5638 5639 5640 5641 5642 5643 5644 5645 5646 5647 5648 5649 5650 5651 5652 5653 5654 5655 5656 5657 5658 5659 5660 5661 5662 5663 5664 5665 5666 5667 5668 5669 5670 5671 5672 5673 5674 5675 5676 5677 5678 5679 5680 5681 5682 5683 5684 5685 5686 5687 5688 5689 5690 5691 5692 5693 5694 5695 5696 5697 5698 5699 5700 5701 5702 5703 5704 5705 5706 5707 5708 5709 5710 5711 5712 5713 5714 5715 5716 5717 5718 5719 5720 5721 5722 5723 5724 5725 5726 5727 5728 5729 5730 5731 5732 5733 5734 5735 5736 5737 5738 5739 5740 5741 5742 5743 5744 5745 5746 5747 5748 5749 5750 5751 5752 5753 5754 5755 5756 5757 5758 5759 5760 5761 5762 5763 5764 5765 5766 5767 5768 5769 5770 5771 5772 5773 5774 5775 5776 5777 5778 5779 5780 5781 5782 5783 5784 5785 5786 5787 5788 5789 5790 5791 5792 5793 5794 5795 5796 5797 5798 5799 5800 5801 5802 5803 5804 5805 5806 5807 5808 5809 5810 5811 5812 5813 5814 5815 5816 5817 5818 5819 5820 5821 5822 5823 5824 5825 5826 5827 5828 5829 5830 5831 5832 5833 5834 5835 5836 5837 5838 5839 5840 5841 5842 5843 5844 5845 5846 5847 5848 5849 5850 5851 5852 5853 5854 5855 5856 5857 5858 5859 5860 5861 5862 5863 5864 5865 5866 5867 5868 5869 5870 5871 5872 5873 5874 5875 5876 5877 5878 5879 5880 5881 5882 5883 5884 5885 5886 5887 5888 5889 5890 5891 5892 5893 5894 5895 5896 5897 5898 5899 5900 5901 5902 5903 5904 5905 5906 5907 5908 5909 5910 5911 5912 5913 5914 5915 5916 5917 5918 5919 5920 5921 5922 5923 5924 5925 5926 5927 5928 5929 5930 5931 5932 5933 5934 5935 5936 5937 5938 5939 5940 5941 5942 5943 5944 5945 5946 5947 5948 5949 5950 5951 5952 5953 5954 5955 5956 5957 5958 5959 5960 5961 5962 5963 5964 5965 5966 5967 5968 5969 5970 5971 5972 5973 5974 5975 5976 5977 5978 5979 5980 5981 5982 5983 5984 5985 5986 5987 5988 5989 5990 5991 5992 5993 5994 5995 5996 5997 5998 5999 6000 6001 6002 6003 6004 6005 6006 6007 6008 6009 6010 6011 6012 6013 6014 6015 6016 6017 6018 6019 6020 6021 6022 6023 6024 6025 6026 6027 6028 6029 6030 6031 6032 6033 6034 6035 6036 6037 6038 6039 6040 6041 6042 6043 6044 6045 6046 6047 6048 6049 6050 6051 6052 6053 6054 6055 6056 6057 6058 6059 6060 6061 6062 6063 6064 6065 6066 6067 6068 6069 6070 6071 6072 6073 6074 6075 6076 6077 6078 6079 6080 6081 6082 6083 6084 6085 6086 6087 6088 6089 6090 6091 6092 6093 6094 6095 6096 6097 6098 6099 6100 6101 6102 6103 6104 6105 6106 6107 6108 6109 6110 6111 6112 6113 6114 6115 6116 6117 6118 6119 6120 6121 6122 6123 6124 6125 6126 6127 6128 6129 6130 6131 6132 6133 6134 6135 6136 6137 6138 6139 6140 6141 6142 6143 6144 6145 6146 6147 6148 6149 6150 6151 6152 6153 6154 6155 6156 6157 6158 6159 6160 6161 6162 6163 6164 6165 6166 6167 6168 6169 6170 6171 6172 6173 6174 6175 6176 6177 6178 6179 6180 6181 6182 6183 6184 6185 6186 6187 6188 6189 6190 6191 6192 6193 6194 6195 6196 6197 6198 6199 6200 6201 6202 6203 6204 6205 6206 6207 6208 6209 6210 6211 6212 6213 6214 6215 6216 6217 6218 6219 6220 6221 6222 6223 6224 6225 6226 6227 6228 6229 6230 6231 6232 6233 6234 6235 6236 6237 6238 6239 6240 6241 6242 6243 6244 6245 6246 6247 6248 6249 6250 6251 6252 6253 6254 6255 6256 6257 6258 6259 6260 6261 6262 6263 6264 6265 6266 6267 6268 6269 6270 6271 6272 6273 6274 6275 6276 6277 6278 6279 6280 6281 6282 6283 6284 6285 6286 6287 6288 6289 6290 6291 6292 6293 6294 6295 6296 6297 6298 6299 6300 6301 6302 6303 6304 6305 6306 6307 6308 6309 6310 6311 6312 6313 6314 6315 6316 6317 6318 6319 6320 6321 6322 6323 6324 6325 6326 6327 6328 6329 6330 6331 6332 6333 6334 6335 6336 6337 6338 6339 6340 6341 6342 6343 6344 6345 6346 6347 6348 6349 6350 6351 6352 6353 6354 6355 6356 6357 6358 6359 6360 6361 6362 6363 6364 6365 6366 6367 6368 6369 6370 6371 6372 6373 6374 6375 6376 6377 6378 6379 6380 6381 6382 6383 6384 6385 6386 6387 6388 6389 6390 6391 6392 6393 6394 6395 6396 6397 6398 6399 6400 6401 6402 6403 6404 6405 6406 6407 6408 6409 6410 6411 6412 6413 6414 6415 6416 6417 6418 6419 6420 6421 6422 6423 6424 6425 6426 6427 6428 6429 6430 6431 6432 6433 6434 6435 6436 6437 6438 6439 6440 6441 6442 6443 6444 6445 6446 6447 6448 6449 6450 6451 6452 6453 6454 6455 6456 6457 6458 6459 6460 6461 6462 6463 6464 6465 6466 6467 6468 6469 6470 6471 6472 6473 6474 6475 6476 6477 6478 6479 6480 6481 6482 6483 6484 6485 6486 6487 6488 6489 6490 6491 6492 6493 6494 6495 6496 6497 6498 6499 6500 6501 6502 6503 6504 6505 6506 6507 6508 6509 6510 6511 6512 6513 6514 6515 6516 6517 6518 6519 6520 6521 6522 6523 6524 6525 6526 6527 6528 6529 6530 6531 6532 6533 6534 6535 6536 6537 6538 6539 6540 6541 6542 6543 6544 6545 6546 6547 6548 6549 6550 6551 6552 6553 6554 6555 6556 6557 6558 6559 6560 6561 6562 6563 6564 6565 6566 6567 6568 6569 6570 6571 6572 6573 6574 6575 6576 6577 6578 6579 6580 6581 6582 6583 6584 6585 6586 6587 6588 6589 6590 6591 6592 6593 6594 6595 6596 6597 6598 6599 6600 6601 6602 6603 6604 6605 6606 6607 6608 6609 6610 6611 6612 6613 6614 6615 6616 6617 6618 6619 6620 6621 6622 6623 6624 6625 6626 6627 6628 6629 6630 6631 6632 6633 6634 6635 6636 6637 6638 6639 6640 6641 6642 6643 6644 6645 6646 6647 6648 6649 6650 6651 6652 6653 6654 6655 6656 6657 6658 6659 6660 6661 6662 6663 6664 6665 6666 6667 6668 6669 6670 6671 6672 6673 6674 6675 6676 6677 6678 6679 6680 6681 6682 6683 6684 6685 6686 6687 6688 6689 6690 6691 6692 6693 6694 6695 6696 6697 6698 6699 6700 6701 6702 6703 6704 6705 6706 6707 6708 6709 6710 6711 6712 6713 6714 6715 6716 6717 6718 6719 6720 6721 6722 6723 6724 6725 6726 6727 6728 6729 6730 6731 6732 6733 6734 6735 6736 6737 6738 6739 6740 6741 6742 6743 6744 6745 6746 6747 6748 6749 6750 6751 6752 6753 6754 6755 6756 6757 6758 6759 6760 6761 6762 6763 6764 6765 6766 6767 6768 6769 6770 6771 6772 6773 6774 6775 6776 6777 6778 6779 6780 6781 6782 6783 6784 6785 6786 6787 6788 6789 6790 6791 6792 6793 6794 6795 6796 6797 6798 6799 6800 6801 6802 6803 6804 6805 6806 6807 6808 6809 6810 6811 6812 6813 6814 6815 6816 6817 6818 6819 6820 6821 6822 6823 6824 6825 6826 6827 6828 6829 6830 6831 6832 6833 6834 6835 6836 6837 6838 6839 6840 6841 6842 6843 6844 6845 6846 6847 6848 6849 6850 6851 6852 6853 6854 6855 6856 6857 6858 6859 6860 6861 6862 6863 6864 6865 6866 6867 6868 6869 6870 6871 6872 6873 6874 6875 6876 6877 6878 6879 6880 6881 6882 6883 6884 6885 6886 6887 6888 6889 6890 6891 6892 6893 6894 6895 6896 6897 6898 6899 6900 6901 6902 6903 6904 6905 6906 6907 6908 6909 6910 6911 6912 6913 6914 6915 6916 6917 6918 6919 6920 6921 6922 6923 6924 6925 6926 6927 6928 6929 6930 6931 6932 6933 6934 6935 6936 6937 6938 6939 6940 6941 6942 6943 6944 6945 6946 6947 6948 6949 6950 6951 6952 6953 6954 6955 6956 6957 6958 6959 6960 6961 6962 6963 6964 6965 6966 6967 6968 6969 6970 6971 6972 6973 6974 6975 6976 6977 6978 6979 6980 6981 6982 6983 6984 6985 6986 6987 6988 6989 6990 6991 6992 6993 6994 6995 6996 6997 6998 6999 7000 7001 7002 7003 7004 7005 7006 7007 7008 7009 7010 7011 7012 7013 7014 7015 7016 7017 7018 7019 7020 7021 7022 7023 7024 7025 7026 7027 7028 7029 7030 7031 7032 7033 7034 7035 7036 7037 7038 7039 7040 7041 7042 7043 7044 7045 7046 7047 7048 7049 7050 7051 7052 7053 7054 7055 7056 7057 7058 7059 7060 7061 7062 7063 7064 7065 7066 7067 7068 7069 7070 7071 7072 7073 7074 7075 7076 7077 7078 7079 7080 7081 7082 7083 7084 7085 7086 7087 7088 7089 7090 7091 7092 7093 7094 7095 7096 7097 7098 7099 7100 7101 7102 7103 7104 7105 7106 7107 7108 7109 7110 7111 7112 7113 7114 7115 7116 7117 7118 7119 7120 7121 7122 7123 7124 7125 7126 7127 7128 7129 7130 7131 7132 7133 7134 7135 7136 7137 7138 7139 7140 7141 7142 7143 7144 7145 7146 7147 7148 7149 7150 7151 7152 7153 7154 7155 7156 7157 7158 7159 7160 7161 7162 7163 7164 7165 7166 7167 7168 7169 7170 7171 7172 7173 7174 7175 7176 7177 7178 7179 7180 7181 7182 7183 7184 7185 7186 7187 7188 7189 7190 7191 7192 7193 7194 7195 7196 7197 7198 7199 7200 7201 7202 7203 7204 7205 7206 7207 7208 7209 7210 7211 7212 7213 7214 7215 7216 7217 7218 7219 7220 7221 7222 7223 7224 7225 7226 7227 7228 7229 7230 7231 7232 7233 7234 7235 7236 7237 7238 7239 7240 7241 7242 7243 7244 7245 7246 7247 7248 7249 7250 7251 7252 7253 7254 7255 7256 7257 7258 7259 7260 7261 7262 7263 7264 7265 7266 7267 7268 7269 7270 7271 7272 7273 7274 7275 7276 7277 7278 7279 7280 7281 7282 7283 7284 7285 7286 7287 7288 7289 7290 7291 7292 7293 7294 7295 7296 7297 7298 7299 7300 7301 7302 7303 7304 7305 7306 7307 7308 7309 7310 7311 7312 7313 7314 7315 7316 7317 7318 7319 7320 7321 7322 7323 7324 7325 7326 7327 7328 7329 7330 7331 7332 7333 7334 7335 7336 7337 7338 7339 7340 7341 7342 7343 7344 7345 7346 7347 7348 7349 7350 7351 7352 7353 7354 7355 7356 7357 7358 7359 7360 7361 7362 7363 7364 7365 7366 7367 7368 7369 7370 7371 7372 7373 7374 7375 7376 7377 7378 7379 7380 7381 7382 7383 7384 7385 7386 7387 7388 7389 7390 7391 7392 7393 7394 7395 7396 7397 7398 7399 7400 7401 7402 7403 7404 7405 7406 7407 7408 7409 7410 7411 7412 7413 7414 7415 7416 7417 7418 7419 7420 7421 7422 7423 7424 7425 7426 7427 7428 7429 7430 7431 7432 7433 7434 7435 7436 7437 7438 7439 7440 7441 7442 7443 7444 7445 7446 7447 7448 7449 7450 7451 7452 7453 7454 7455 7456 7457 7458 7459 7460 7461 7462 7463 7464 7465 7466 7467 7468 7469 7470 7471 7472 7473 7474 7475 7476 7477 7478 7479 7480 7481 7482 7483 7484 7485 7486 7487 7488 7489 7490 7491 7492 7493 7494 7495 7496 7497 7498 7499 7500 7501 7502 7503 7504 7505 7506 7507 7508 7509 7510 7511 7512 7513 7514 7515 7516 7517 7518 7519 7520 7521 7522 7523 7524 7525 7526 7527 7528 7529 7530 7531 7532 7533 7534 7535 7536 7537 7538 7539 7540 7541 7542 7543 7544 7545 7546 7547 7548 7549 7550 7551 7552 7553 7554 7555 7556 7557 7558 7559 7560 7561 7562 7563 7564 7565 7566 7567 7568 7569 7570 7571 7572 7573 7574 7575 7576 7577 7578 7579 7580 7581 7582 7583 7584 7585 7586 7587 7588 7589 7590 7591 7592 7593 7594 7595 7596 7597 7598 7599 7600 7601 7602 7603 7604 7605 7606 7607 7608 7609 7610 7611 7612 7613 7614 7615 7616 7617 7618 7619 7620 7621 7622 7623 7624 7625 7626 7627 7628 7629 7630 7631 7632 7633 7634 7635 7636 7637 7638 7639 7640 7641 7642 7643 7644 7645 7646 7647 7648 7649 7650 7651 7652 7653 7654 7655 7656 7657 7658 7659 7660 7661 7662 7663 7664 7665 7666 7667 7668 7669 7670 7671 7672 7673 7674 7675 7676 7677 7678 7679 7680 7681 7682 7683 7684 7685 7686 7687 7688 7689 7690 7691 7692 7693 7694 7695 7696 7697 7698 7699 7700 7701 7702 7703 7704 7705 7706 7707 7708 7709 7710 7711 7712 7713 7714 7715 7716 7717 7718 7719 7720 7721 7722 7723 7724 7725 7726 7727 7728 7729 7730 7731 7732 7733 7734 7735 7736 7737 7738 7739 7740 7741 7742 7743 7744 7745 7746 7747 7748 7749 7750 7751 7752 7753 7754 7755 7756 7757 7758 7759 7760 7761 7762 7763 7764 7765 7766 7767 7768 7769 7770 7771 7772 7773 7774 7775 7776 7777 7778 7779 7780 7781 7782 7783 7784 7785 7786 7787 7788 7789 7790 7791 7792 7793 7794 7795 7796 7797 7798 7799 7800 7801 7802 7803 7804 7805 7806 7807 7808 7809 7810 7811 7812 7813 7814 7815 7816 7817 7818 7819 7820 7821 7822 7823 7824 7825 7826 7827 7828 7829 7830 7831 7832 7833 7834 7835 7836 7837 7838 7839 7840 7841 7842 7843 7844 7845 7846 7847 7848 7849 7850 7851 7852 7853 7854 7855 7856 7857 7858 7859 7860 7861 7862 7863 7864 7865 7866 7867 7868 7869 7870 7871 7872 7873 7874 7875 7876 7877 7878 7879 7880 7881 7882 7883 7884 7885 7886 7887 7888 7889 7890 7891 7892 7893 7894 7895 7896 7897 7898 7899 7900 7901 7902 7903 7904 7905 7906 7907 7908 7909 7910 7911 7912 7913 7914 7915 7916 7917 7918 7919 7920 7921 7922 7923 7924 7925 7926 7927 7928 7929 7930 7931 7932 7933 7934 7935 7936 7937 7938 7939 7940 7941 7942 7943 7944 7945 7946 7947 7948 7949 7950 7951 7952 7953 7954 7955 7956 7957 7958 7959 7960 7961 7962 7963 7964 7965 7966 7967 7968 7969 7970 7971 7972 7973 7974 7975 7976 7977 7978 7979 7980 7981 7982 7983 7984 7985 7986 7987 7988 7989 7990 7991 7992 7993 7994 7995 7996 7997 7998 7999 8000 8001 8002 8003 8004 8005 8006 8007 8008 8009 8010 8011 8012 8013 8014 8015 8016 8017 8018 8019 8020 8021 8022 8023 8024 8025 8026 8027 8028 8029 8030 8031 8032 8033 8034 8035 8036 8037 8038 8039 8040 8041 8042 8043 8044 8045 8046 8047 8048 8049 8050 8051 8052 8053 8054 8055 8056 8057 8058 8059 8060 8061 8062 8063 8064 8065 8066 8067 8068 8069 8070 8071 8072 8073 8074 8075 8076 8077 8078 8079 8080 8081 8082 8083 8084 8085 8086 8087 8088 8089 8090 8091 8092 8093 8094 8095 8096 8097 8098 8099 8100 8101 8102 8103 8104 8105 8106 8107 8108 8109 8110 8111 8112 8113 8114 8115 8116 8117 8118 8119 8120 8121 8122 8123 8124 8125 8126 8127 8128 8129 8130 8131 8132 8133 8134 8135 8136 8137 8138 8139 8140 8141 8142 8143 8144 8145 8146 8147 8148 8149 8150 8151 8152 8153 8154 8155 8156 8157 8158 8159 8160 8161 8162 8163 8164 8165 8166 8167 8168 8169 8170 8171 8172 8173 8174 8175 8176 8177 8178 8179 8180 8181 8182 8183 8184 8185 8186 8187 8188 8189 8190 8191 8192 8193 8194 8195 8196 8197 8198 8199 8200 8201 8202 8203 8204 8205 8206 8207 8208 8209 8210 8211 8212 8213 8214 8215 8216 8217 8218 8219 8220 8221 8222 8223 8224 8225 8226 8227 8228 8229 8230 8231 8232 8233 8234 8235 8236 8237 8238 8239 8240 8241 8242 8243 8244 8245 8246 8247 8248 8249 8250 8251 8252 8253 8254 8255 8256 8257 8258 8259 8260 8261 8262 8263 8264 8265 8266 8267 8268 8269 8270 8271 8272 8273 8274 8275 8276 8277 8278 8279 8280 8281 8282 8283 8284 8285 8286 8287 8288 8289 8290 8291 8292 8293 8294 8295 8296 8297 8298 8299 8300 8301 8302 8303 8304 8305 8306 8307 8308 8309 8310 8311 8312 8313 8314 8315 8316 8317 8318 8319 8320 8321 8322 8323 8324 8325 8326 8327 8328 8329 8330 8331 8332 8333 8334 8335 8336 8337 8338 8339 8340 8341 8342 8343 8344 8345 8346 8347 8348 8349 8350 8351 8352 8353 8354 8355 8356 8357 8358 8359 8360 8361 8362 8363 8364 8365 8366 8367 8368 8369 8370 8371 8372 8373 8374 8375 8376 8377 8378 8379 8380 8381 8382 8383 8384 8385 8386 8387 8388 8389 8390 8391 8392 8393 8394 8395 8396 8397 8398 8399 8400 8401 8402 8403 8404 8405 8406 8407 8408 8409 8410 8411 8412 8413 8414 8415 8416 8417 8418 8419 8420 8421 8422 8423 8424 8425 8426 8427 8428 8429 8430 8431 8432 8433 8434 8435 8436 8437 8438 8439 8440 8441 8442 8443 8444 8445 8446 8447 8448 8449 8450 8451 8452 8453 8454 8455 8456 8457 8458 8459 8460 8461 8462 8463 8464 8465 8466 8467 8468 8469 8470 8471 8472 8473 8474 8475 8476 8477 8478 8479 8480 8481 8482 8483 8484 8485 8486 8487 8488 8489 8490 8491 8492 8493 8494 8495 8496 8497 8498 8499 8500 8501 8502 8503 8504 8505 8506 8507 8508 8509 8510 8511 8512 8513 8514 8515 8516 8517 8518 8519 8520 8521 8522 8523 8524 8525 8526 8527 8528 8529 8530 8531 8532 8533 8534 8535 8536 8537 8538 8539 8540 8541 8542 8543 8544 8545 8546 8547 8548 8549 8550 8551 8552 8553 8554 8555 8556 8557 8558 8559 8560 8561 8562 8563 8564 8565 8566 8567 8568 8569 8570 8571 8572 8573 8574 8575 8576 8577 8578 8579 8580 8581 8582 8583 8584 8585 8586 8587 8588 8589 8590 8591 8592 8593 8594 8595 8596 8597 8598 8599 8600 8601 8602 8603 8604 8605 8606 8607 8608 8609 8610 8611 8612 8613 8614 8615 8616 8617 8618 8619 8620 8621 8622 8623 8624 8625 8626 8627 8628 8629 8630 8631 8632 8633 8634 8635 8636 8637 8638 8639 8640 8641 8642 8643 8644 8645 8646 8647 8648 8649 8650 8651 8652 8653
|
Dear Emacs, please make this -*-Text-*- mode!
**************************************************
* *
* 2.0 SERIES NEWS *
* *
**************************************************
CHANGES IN R VERSION 2.0.0
USER-VISIBLE CHANGES
o The stub packages from 1.9.x have been removed: the library()
function selects the new home for their code.
o `Lazy loading' of R code has been implemented, and is used for
the standard and recommended packages by default. Rather than
keep R objects in memory, they are kept in a database on disc
and only loaded on first use. This accelerates startup (down
to 40% of the time for 1.9.x) and reduces memory usage -- the
latter is probably unimportant of itself, but reduces
commensurately the time spent in garbage collection.
Packages are by default installed using lazy loading if they
have more than 25Kb of R code and did not use a saved image.
This can be overridden by INSTALL --[no-]lazy or via a field
in the DESCRIPTION file. Note that as with --save, any other
packages which are required must be already installed.
As the lazy-loading databases will be consulted often, R
will be slower if run from a slow network-mounted disc.
o All the datasets formerly in packages 'base' and 'stats' have
been moved to a new package 'datasets'. data() does the
appropriate substitution, with a warning. However, calls to
data() are not normally needed as the data objects are visible
in the 'datasets' package.
Packages can be installed to make their data objects visible
via R CMD INSTALL --lazy-data or via a field in the
DESCRIPTION file.
o Package 'graphics' has been split into 'grDevices' (the graphics
devices shared between base and grid graphics) and 'graphics'
(base graphics). Each of the 'graphics' and 'grid' packages
load 'grDevices' when they are attached. Note that
ps.options() has been moved to grDevices and user hooks may
need to be updated.
o The semantics of data() have changed (and were incorrectly
documented in recent releases) and the function has been moved
to package 'utils'. Please read the help page carefully if
you use the 'package' or 'lib.loc' arguments.
data() now lists datasets, and not just names which data() accepts.
o Dataset 'phones' has been renamed to 'WorldPhones'.
o Datasets 'sunspot.month' and 'sunspot.year' are available
separately but not via data(sunspot) (which was used by package
lattice to retrieve a dataset 'sunspot').
o Packages must have been re-installed for this version, and
library() will enforce this.
o Package names must now be given exactly in library() and
require(), regardless of whether the underlying file system is
case-sensitive or not. So 'library(mass)' will not work, even
on Windows.
o R no longer accepts associative use of relational operators.
That is, 3 < 2 < 1 (which used to evalute as TRUE!) now causes
a syntax error. If this breaks existing code, just add
parentheses -- or braces in the case of plotmath.
o The R parser now allows multiline strings, without escaping
the newlines with backslashes (the old method still works).
Patch by Mark Bravington.
NEW FEATURES
o There is a new atomic vector type, class "raw". See ?raw for
full details including the operators and utility functions provided.
o The default barplot() method by default uses a
gamma-corrected grey palette (rather than the heat color
palette) for coloring its output when given a matrix.
o The 'formula' method for boxplot() has a 'na.action' argument,
defaulting to NULL. This is mainly useful if the response
is a matrix when the previous default of 'na.omit' would omit
entire rows. (Related to PR#6846.)
boxplot() and bxp() now obey global 'par' settings and also
allow the specification of graphical options in more detail,
compatibly with S-PLUS (fulfilling wishlist entry PR#6832)
thanks to contributions from Arni Magnusson. For consistency,
'boxwex' is not an explicit argument anymore.
o chull() has been moved to package graphics (as it uses xy.coords).
o There is now a coef() method for summaries of "nls" objects.
o compareVersion(), packageDescription() and read.00Index()
have been moved to package 'utils'.
o convolve(), fft(), mvfft() and nextn() have been moved to
package stats.
o coplot() now makes use of cex.lab and font.lab par() settings.
o cumsum/prod/max/min() now preserve names.
o data(), .path.packages() and .find.packages() now interpret
package = NULL to mean all loaded packages.
o data.frame() and its replacement methods remove the names from
vector columns. Using I() will ensure that names are
preserved.
o data.frame(check.names = TRUE) (the default) enforces unique
names, as S does.
o .Defunct() now has 'new' and 'package' arguments like those of
.Deprecated().
o The plot() method for "dendrogram" objects now respects many more
nodePar and edgePar settings and for edge labeling computes the
extents of the diamond more correctly.
o deparse(), dput() and dump() have a new 'control' argument to
control the level of detail when deparsing. dump() defaults to
the most detail, the others default to less. See ?.deparseOpts
for the details.
They now evaluate promises by default: see ?dump for details.
o dir.create() now expands '~' in filenames.
o download.file() has a new progress meter (under Unix) if the
length of the file is known -- it uses 50 equals signs.
o dyn.load() and library.dynam() return an object describing the
DLL that was loaded. For packages with namespaces, the DLL
objects are stored in a list within the namespace.
o New function eapply() - apply for environments. The supplied
function is applied to each element of the environment; the order
of application is not specified.
o edit() and fix() use the object name in the window caption on
some platforms (e.g. Windows).
o Function file.edit() function added: like file.show(), but
allows editing.
o Function file.info() can return file sizes > 2G if the
underlying OS supports such.
o fisher.test(*, conf.int=FALSE) allows the confidence interval
computation to be skipped.
o formula() methods for classes "lm" and "glm" used the expanded
formula (with '.' expanded) from the terms component.
o The `formula' method for ftable() now looks for variables in the
environment of the formula before the usual search path.
o A new function getDLLRegisteredRoutines() returns information
about the routines available from a DLL that were explicitly
registered with R's dynamic loading facilities.
o A new function getLoadedDLLs() returns information about the
DLLs that are currently loaded within this session.
o The package element returned by getNativeSymbolInfo() contains
reference to both the internal object used to resolve symbols
with the DLL, and the internal DllInfo structure used to
represent the DLL within R.
o help() now returns information about available documentation for
a given topic, and notifies about multiple matches. It has a
separate print() method.
If the latex help files were not installed, help() will offer
to create a latex file on-the-fly from the installed .Rd file.
o heatmap() has a new argument 'reorderfun'.
o Most versions of install.packages() have an new optional
argument 'dependencies = TRUE' which will not only fetch the
packages but also their uninstalled dependencies and their
dependencies ....
The Unix version of install.packages() attempts to install
packages in an order that reflects their dependencies. (This
is not needed for binary installs as used under Windows.)
o interaction() has new argument 'sep'.
o interaction.plot() allows 'type = "b"' and doesn't give spurious
warnings when passed a matplot()-only argument such as 'main'.
o is.integer() and is.numeric() always return FALSE for a
factor. (Previously they were true and false respectively for
well-formed factors, but it is possible to create factors
with non-integer codes by underhand means.)
o New functions is.leaf(), dendrapply() and a labels() method for
dendrogram objects.
o legend() has an argument 'pt.lwd' and setting 'density' now works
because 'angle' now defaults to 45 (mostly contributed by Uwe Ligges).
o library() now checks the version dependence (if any) of
required packages mentioned in the Depends: field of the
DESCRIPTION file.
o load() now detects and gives a warning (rather than an error)
for empty input, and tries to detect (but not correct) files
which have had LF replaced by CR.
o ls.str() and lsf.str() now return an object of class "ls_str" which
has a print method.
o make.names() has a new argument allow_, which if false allows
its behaviour in R 1.8.1 to be reproduced.
o The 'formula' method for mosaicplot() has a 'na.action' argument
defaulting to 'na.omit'.
o model.frame() now warns if it is given data = newdata and it
creates a model frame with a different number of rows from
that implied by the size of 'newdata'.
Time series attributes are never copied to variables in the
model frame unless na.action = NULL. (This was always the
intention, but they sometimes were as the result of an earlier
bug fix.)
o There is a new 'padj' argument to mtext() and axis().
Code patch provided by Uwe Ligges (fixes PR#1659 and PR#7188).
o Function package.dependencies() has been moved to package 'tools'.
o The 'formula' method for pairs() has a 'na.action' argument,
defaulting to 'na.pass', rather than the value of
getOption("na.action").
o There are five new par() settings:
'family' can be used to specify a font family for graphics
text. This is a device-independent family specification
which gets mapped by the graphics device to a device-specific
font specification (see, for example, postscriptFonts()).
Currently, only PostScript, PDF, X11, Quartz, and Windows
respond to this setting.
'lend', 'ljoin', and 'lmitre' control the cap style and
join style for drawing lines (only noticeable on thick lines
or borders). Currently, only PostScript, PDF, X11, and Quartz
respond to these settings.
'lheight' is a multiplier used in determining the vertical
spacing of multi-line text.
All of these settings are currently only available via par()
(i.e., not in-line as arguments to plot(), lines(), ...)
o PCRE (as used by grep etc) has been updated to version 5.0.
o A 'version' argument has been added to pdf() device. If this is
set to "1.4", the device will support transparent colours.
o plot.xy(), the workhorse function of points(), lines() and
plot.default() now has 'lwd' as explicit argument instead of
implicitly in '...', and now recycles lwd where it makes
sense, i.e. for line-based plot symbols.
o The png() and jpeg() devices (and the bmp() device under Windows)
now allow a nominal resolution to be recorded in the file.
o New functions to control mapping from device-independent
graphics font family to device-specific family:
postscriptFont() and postscriptFonts() (for both postscript()
and pdf()); X11Font() and X11Fonts(); windowsFont() and
windowsFonts(); quartzFont() and quartzFonts().
o power (x^y) has optimised code for y == 2.
o prcomp() is now generic, with a formula method (based on an
idea of Jari Oksanen).
prcomp() now has a simple predict() method.
o printCoefmat() has a new logical argument 'signif.legend'.
o quantile() has the option of several methods described in
Hyndman & Fan (1996). (Contributed by Rob Hyndman.)
o rank() has two new 'ties.method's, "min" and "max".
o New function read.fortran() reads Fortran-style fixed-format
specifications.
o read.fwf() reads multiline records, is faster for large files.
o read.table() now accepts "NULL", "factor", "Date" and
"POSIXct" as possible values of colClasses, and colClasses can
be a named character vector.
o readChar() can now read strings with embedded nuls.
o The "dendrogram" method for reorder() now has a 'agglo.FUN'
argument for specification of a weights agglomeration
function.
o New reorder() method for factors, slightly extending that in
lattice. Contributed by Deepayan Sarkar.
o Replaying a plot (with replayPlot() or via autoprinting) now
automagically opens a device if none is open.
o replayPlot() issues a warning if an attempt is made to replay
a plot that was recorded using a different R version (the
format for recorded plots is not guaranteed to be stable
across different R versions). The Windows-menu equivalent
(History...Get from variable) issues a similar warning.
o reshape() can handle multiple 'id' variables.
o It is now possible to specify colours with a full alpha
transparency channel via the new 'alpha' argument to the
rgb() and hsv() functions, or as a string of the form "#RRGGBBAA".
NOTE: most devices draw nothing if a colour is not opaque,
but PDF and Quartz devices will render semitransparent colours.
A new argument 'alpha' to the function col2rgb()
provides the ability to return the alpha component of
colours (as well as the red, green, and blue components).
o save() now checks that a binary connection is used.
o seek() on connections now accepts and returns a double for the
file position. This allows >2Gb files to be handled on a
64-bit platform (and some 32-bit platforms).
o source() with 'echo = TRUE' uses the function source attribute
when displaying commands as they are parsed.
o setClass() and its utilities now warn if either superclasses
or classes for slots are undefined. (Use setOldClass to
register S3 classes for use as slots)
o str(obj) now displays more reasonably the STRucture of S4 objects.
It is also improved for language objects and lists with promise
components.
The method for class "dendrogram" has a new argument 'stem' and
indicates when it's not printing all levels (as typically when
e.g., 'max.level = 2').
Specifying 'max.level = 0' now allows to suppress all but the top
level for hierarchical objects such as lists. This is different
to previous behavior which was the default behavior of giving all
levels is unchanged. The default behavior is unchanged but now
specified by 'max.level = NA'.
o system.time() has a new argument 'gcFirst' which, when TRUE,
forces a garbage collection before timing begins.
o tail() of a matrix now displays the original row numbers.
o The default method for text() now coerces a factor to character
and not to its internal codes. This is incompatible with S
but seems what users would expect.
It now also recycles (x,y) to the length of 'labels' if that
is longer. This is now compatible with grid.text() and
S. (See also PR#7084.)
o TukeyHSD() now labels comparisons when applied to an
interaction in an aov() fit. It detects non-factor terms in
'which' and drops them if sensible to do so.
o There is now a replacement method for window(), to allow a
range of values of time series to be replaced by specifying the
start and end times (and optionally a frequency).
o If writeLines() is given a connection that is not open, it now
attempts to open it in mode = "wt" rather than the default
mode specified when creating the connection.
o The screen devices x11(), windows() and quartz() have a new
argument 'bg' to set the default background colour.
o Subassignments involving NAs and with a replacement value of
length > 1 are now disallowed. (They were handled
inconsistently in R < 2.0.0, see PR#7210.) For data frames
they are disallowed altogether, even for logical matrix indices
(the only case which used to work).
o The way the comparison operators handle a list argument has
been rationalized so a few more cases will now work -- see
?Comparison.
o Indexing a vector by a character vector was slow if both the
vector and index were long (say 10,000). Now hashing is used
and the time should be linear in the longer of the lengths
(but more memory is used).
o Printing a character string with embedded nuls now prints the
whole string, and non-printable characters are represented by
octal escape sequences.
o Objects created from a formally defined class now include the
name of the corresponding package as an attribute in the
object's class. This allows packages with namespaces to have
private (non-exported) classes.
o Changes to package 'grid':
- Calculation of number of circles to draw in circleGrob now
looks at length of y and r as well as length of x.
- Calculation of number of rectangles to draw in rectGrob now
looks at length of y, w, and h as well as length of x.
- All primitives (rectangles, lines, text, ...) now handle
non-finite values (NA, Inf, -Inf, NaN) for locations and
sizes.
Non-finite values for locations, sizes, and scales of
viewports result in error messages.
There is a new vignette ("nonfinite") which describes this
new behaviour.
- Fixed (unreported) bug in drawing circles. Now checks that
radius is non-negative.
- downViewport() now reports the depth it went down to find a
viewport. Handy for "going back" to where you started, e.g., ...
depth <- downViewport("vpname")
<draw stuff>
upViewport(depth)
- The "alpha" gpar() is now combined with the alpha channel of
colours when creating a gcontext as follows: (internal C code)
finalAlpha = gpar("alpha")*(R_ALPHA(col)/255)
This means that gpar(alpha=) settings now affect internal
colours so grid alpha transparency settings now are sent to
graphics devices.
The alpha setting is also cumulative. For example, ...
grid.rect(width=0.5, height=0.5,
gp=gpar(fill="blue")) # alpha = 1
pushViewport(viewport(gp=gpar(alpha=0.5)))
grid.rect(height=0.25, gp=gpar(fill="red")) # alpha = 0.5
pushViewport(viewport(gp=gpar(alpha=0.5)))
grid.rect(width=0.25, gp=gpar(fill="red")) # alpha = 0.25 !
- Editing a gp slot in a grob is now incremental. For example ...
grid.lines(name="line")
grid.edit("line", gp=gpar(col="red")) # line turns red
grid.edit("line", gp=gpar(lwd=3)) # line becomes thick
# AND STAYS red
- The "cex" gpar is now cumulative. For example ...
grid.rect(height=unit(4, "char")) # cex = 1
pushViewport(viewport(gp=gpar(cex=0.5)))
grid.rect(height=unit(4, "char")) # cex = 0.5
pushViewport(viewport(gp=gpar(cex=0.5)))
grid.rect(height=unit(4, "char")) # cex = 0.125 !!!
- New childNames() function to list the names of children
of a gTree.
- The "grep" and "global" arguments have been implemented for
grid.[add|edit|get|remove]Grob() functions.
The "grep" argument has also been implemented for the
grid.set() and setGrob().
- New function grid.grab() which creates a gTree from the
current display list (i.e., the current page of output can
be converted into a single gTree object with all grobs
on the current page as children of the gTree and all the
viewports used in drawing the current page in the childrenvp
slot of the gTree).
- New "lineend", "linejoin", and "linemitre" gpar()s:
line end can be "round", "butt", or "square".
line join can be "round", "mitre", or "bevel".
line mitre can be any number larger than 1
(controls when a mitre join gets turned into a bevel join;
proportional to angle between lines at join;
very big number means that conversion only happens for lines
that are almost parallel at join).
- New grid.prompt() function for controlling whether the user is
prompted before starting a new page of output.
Grid no longer responds to the par(ask) setting in the "graphics"
package.
o The tcltk package has had the tkcmd() function renamed as
tcl() since it could be used to invoke commands that had
nothing to do with Tk. The old name is retained, but will be
deprecated in a future release. Similarly, we now have
tclopen(), tclclose(), tclread(), tclputs(), tclfile.tail(),
and tclfile.dir() replacing counterparts starting with "tk",
with old names retained for now.
UTILITIES
o R CMD check now checks for file names in a directory that
differ only by case.
o R CMD check now checks Rd files using R code from package tools,
and gives refined diagnostics about "likely" Rd problems (stray
top-level text which is silently discarded by Rdconv).
o R CMD INSTALL now fails for packages with incomplete/invalid
DESCRIPTION metadata, using new code from package tools which is
also used by R CMD check.
o list_files_with_exts (package tools) now handles zipped directories.
o Package 'tools' now provides Rd_parse(), a simple top-level
parser/analyzer for R documentation format.
o tools::codoc() (and hence R CMD check) now checks any documentation
for registered S3 methods and unexported objects in packages
with namespaces.
o Package 'utils' contains several new functions:
- Generics toBibtex() and toLatex() for converting
R objects to BibTeX and LaTeX (but almost no methods yet).
- A much improved citation() function which also has a package
argument. By default the citation is auto-generated from
the package DESCRIPTION, the file 'inst/CITATION' can be
used to override this, see help(citation) and
help(citEntry).
- sessionInfo() can be used to include version information about
R and R packages in text or LaTeX documents.
DOCUMENTATION
o The DVI and PDF manuals are now all made on the paper specified
by R_PAPERSIZE (default 'a4'), even the .texi manuals which
were made on US letter paper in previous versions.
o The reference manual now omits 'internal' help pages.
o There is a new help page shown by help("Memory-limits") which
documents the current design limitations on large objects.
o The format of the LaTeX version of the documentation has
changed. The old format is still accepted, but only the new
resolves cross-references to object names containing _, for
example.
o HTML help pages now contain a reference to the package and
version in the footer, and HTML package index pages give their
name and version at the top.
o All manuals in the 2.x series have new ISBN numbers.
o The 'R Data Import/Export' manual has been revised and has a
new chapter on `Reading Excel spreadsheets'.
C-LEVEL FACILITIES
o The PACKAGE argument for .C/.Call/.Fortran/.External can be
omitted if the call is within code within a package with a
namespace. This ensures that the native routine being called
is found in the DLL of the correct version of the package if
multiple versions of a package are loaded in the R session.
Using a namespace and omitting the PACKAGE argument is
currently the only way to ensure that the correct version is
used.
o The header Rmath.h contains a definition for R_VERSION_STRING
which can be used to track different versions of R and libRmath.
o The Makefile in src/nmath/standalone now has 'install' and
'uninstall' targets -- see the README file in that directory.
o More of the header files, including Rinternals.h, Rdefines.h and
Rversion.h, are now suitable for calling directly from C++.
o Configure looks to a suitable option for inlining C code which
made available as macro R_INLINE: see `Writing R Extensions'
for further details.
DEPRECATED & DEFUNCT
o Direct use of R INSTALL|REMOVE|BATCH|COMPILE|SHLIB has been
removed: use R CMD instead.
o La.eigen(), tetragamma(), pentagamma(), package.contents() and
package.description() are defunct.
o The undocumented function newestVersion() is no longer exported
from package utils. (Mainly because it was not completely general.)
o C-level entry point ptr_R_GetX11Image has been removed, as it
was replaced by R_GetX11Image at 1.7.0.
o The undocumented C-level entry point R_IsNaNorNA has been
removed. It was used in a couple of packages, and should be
replaced by a call to the documented macro ISNAN.
o The gnome/GNOME graphics device is now defunct.
INSTALLATION CHANGES
o Arithmetic supporting +/-Inf, NaNs and the IEC 60559 (aka
IEEE 754) standard is now required -- the partial and often
untested support for more limited arithmetic has been removed.
The C99 macro isfinite is used in preference to finite if available
(and its correct functioning is checked at configure time).
Where isfinite or finite is available and works, it is used as
the substitution value for R_FINITE. On some platforms this
leads to a performance gain. (This applies to compiled code
in packages only for isfinite.)
o The dynamic libraries libR and libRlapack are now installed in
R_HOME/lib rather than R_HOME/bin.
o When --enable-R-shlib is specified, the R executable is now a
small executable linked against libR: see the R-admin manual
for further discussion. The 'extra' libraries bzip2, pcre,
xdr and zlib are now compiled in a way that allows the code to
be included in a shared library only if this option is
specified, which might improve performance when it is not.
o The main R executable is now R_HOME/exec/R not R_HOME/R.bin, to
ease issues on MacOS X. (The location is needed when debugging
core dumps, on other platforms.)
o Configure now tests for 'inline' and alternatives, and the
src/extra/bzip2 code now (potentially) uses inlining where
available and not just under gcc.
o The XPG4 sed is used on Solaris for forming dependencies,
which should now be done correctly.
o Makeinfo 4.5 or later is now required for building the HTML and
Info versions of the manuals. However, binary distributions
need to be made with 4.7 or later to ensure some of the
links are correct.
o f2c is not allowed on 64-bit platforms, as it uses longs for
Fortran integers.
o There are new options on how to make the PDF version of the
reference manual -- see the 'R Administration and Installation
Manual' section 2.2.
o The concatenated Rd files in the installed 'man' directory are
now compressed and the R CMD check routines can read the
compressed files.
o There is a new configure option --enable-linux-lfs that will
build R with support for > 2Gb files on suitably recent 32-bit
Linux systems.
PACKAGE INSTALLATION CHANGES
o The DESCRIPTION file of packages may contain a 'Imports:'
field for packages whose namespaces are used but do not need
to be attached. Such packages should no longer be listed in
'Depends:'.
o There are new optional fields 'SaveImage', 'LazyLoad' and
'LazyData' in the DESCRIPTION file. Using 'SaveImage' is
preferred to using an empty file 'install.R'.
o A package can contain a file 'R/sysdata.rda' to contain
system datasets to be lazy-loaded into the namespace/package
environment.
o The packages listed in 'Depends' are now loaded before a package
is loaded (or its image is saved or it is prepared for lazy
loading). This means that almost all uses of R_PROFILE.R and
install.R are now unnecessary.
o If installation of any package in a bundle fails, R CMD
INSTALL will back out the installation of all of the bundle,
not just the failed package (on both Unix and Windows).
BUG FIXES
o Complex superassignments were wrong when a variable with the same
name existed locally, and were not documented in R-lang.
o rbind.data.frame() dropped names/rownames from columns in all
but the first data frame.
o The dimnames<- method for data.frames was not checking the
validity of the row names.
o Various memory leaks reported by valgrind have been plugged.
o gzcon() connections would sometimes read the crc bytes from
the wrong place, possibly uninitialized memory.
o Rd.sty contained a length \middle that was not needed after a
revision in July 2000. It caused problems with LaTeX systems
based on e-TeX which are starting to appear.
o save() to a connection did not check that the connection was
open for writing, nor that non-ascii saves cannot be made to a
text-mode connection.
o phyper() uses a new algorithm based on Morten Welinder's bug
report (PR#6772). This leads to faster code for large arguments
and more precise code, e.g. for phyper(59, 150,150, 60, lower=FALSE).
This also fixes bug (PR#7064) about fisher.test().
o print.default(*, gap = <n>) now in principle accepts all
non-negative values <n>.
o smooth.spline(...)$pen.crit had a typo in its computation;
note this was printed in print.smooth.spline(*) but not used in
other "smooth.spline" methods.
o write.table() handles zero-row and zero-column inputs correctly.
o debug() works on trivial functions instead of crashing. (PR#6804)
o eval() could alter a data.frame/list second argument, so
with(trees, Girth[1] <- NA) altered 'trees' (and any copy of
'trees' too).
o cor() could corrupt memory when the standard deviation was
zero. (PR#7037)
o inverse.gaussian() always printed 1/mu^2 as the link function.
o constrOptim() now passes ... arguments through optim to the
objective function.
o object.size() now has a better estimate for character vectors:
it was in general too low (but only significantly so for
very short character strings) but over-estimated NA and
duplicated elements.
o quantile() now interpolates correctly between finite and
infinite values (giving +/-Inf rather than NaN).
o library() now gives more informative error messages mentioning
the package being loaded.
o Building the reference manual no longer uses roman upright
quotes in typewriter output.
o model.frame() no longer builds invalid data frames if the
data contains time series and rows are omitted by na.action.
o write.table() did not escape quotes in column names. (PR#7171)
o Range checks missing in recursive assignments using [[ ]]. (PR#7196)
o packageStatus() reported partially-installed bundles as
installed.
o apply() failed on an array of dimension >=3 when for each
iteration the function returns a named vector of length >=2.
(PR#7205)
o The GNOME interface was in some circumstances failing if run
from a menu -- it needed to always specify that R be interactive.
o depMtrxToStrings (part of pkgDepends) applied nrow() to a
non-matrix and aborted on the result.
o Fix some issues with nonsyntactical names in modelling code
(PR#7202), relating to backquoting. There are likely more.
o Support for S4 classes that extend basic classes has been fixed
in several ways. as() methods and x@.Data should work better.
o hist() and pretty() accept (and ignore) infinite values. (PR#7220)
o It is no longer possible to call gzcon() more than once on a
connection.
o t.test() now detects nearly-constant input data. (PR#7225)
o mle() had problems if ndeps or parscale was supplied in the
control arguments for optim(). Also, the profiler is now more
careful to reevaluate modified mle() calls in its parent
environment.
o Fix to rendering of accented superscripts and subscripts e.g.,
expression((b[dot(a)])). (Patch from Uwe Ligges.)
o attach(*, pos=1) now gives a warning (and will give an error).
o power.*test() now gives an error when 'sig.level' is outside [0,1].
(PR#7245)
o Fitting a binomial glm with a matrix response lost the names of
the response, which should have been transferred to the
residuals and fitted values.
o print.ts() could get the year wrong because rounding issue
(PR#7255)
**************************************************
* *
* 1.9 SERIES NEWS *
* *
**************************************************
CHANGES IN R VERSION 1.9.1 Patched
INSTALLATION ISSUES
o Installation will now work even in Norwegian and Danish locales
which sort AA at the end (for package stats4 which has AAA.R).
BUG FIXES
o Various memory leaks have been plugged and uses of strcpy()
with overlapping src and dest corrected.
o R CMD INSTALL now also works for /bin/sh's such as the one from
Solaris 8 which fail when a function has the same name as a variable.
o The Date method for trunc() failed.
o window() failed if both start and end were outside the time
range of the original series (possible if extend = TRUE).
o coplot(..) doesn't give an extraneous warning anymore when called
on a fresh device.
o hasArg() used wrong logic to get the parent function. (sys.function()
behaves differently from what is documented.)
o prompt(f) now gives proper \usage{..} for
f <- function(x, g = function(u) { v <- u^2 ; sin(v)/v }) { g(x) }
o package.skeleton() now uses the supplied name in the DESCRIPTION
file.
o options(list('digits', 'scipen')) no longer seg.faults, the
problem being the misuse of a list (PR#7078).
o summary.Date() now has a more sensible default for 'digits'.
o list.files(all.files = TRUE, recursive = TRUE) died on infinite
recursion. (PR#7100)
o cor(as.array(c(a=1,b=2)), cbind(1:2)) no longer seg.faults (PR#7116).
cor(), cov() and var() no longer accidentally work with list()
arguments as if they were unlist()ed.
o as.matrix(data.frame(d=as.POSIXct("2004-07-20"))) doesn't give a
wrong warning anymore.
o gsub(perl=TRUE) code got the R length of return strings wrong
in some circumstances (when the string was shortened).
(Fixed also PR#7108)
o summaryRprof() was ignoring functions whose name begins with dot,
e.g. .C, .Call, .Fortran. (PR#7137)
o loglin() could segfault if 'start' was of the wrong length. (PR#7123)
o model.tables(type="means") could fail in a design where a
projection gave all zeros. (PR#7132)
o Applying attributes() to a pairlist, e.g. .Options, could segfault.
o The checking of R versions incorrectly assumed 1.9.1 >= 1.50.
o str(Surv(..)) failed for type = "counting" Surv objects and for
promises.
o approx(c(1,2),c(NA,NA),1.5,rule=2) does not segfault anymore
(PR#7177), but gives an error.
o nls(model = TRUE) was broken.
o Subsetted assignments of the form A[i1, i2, i3] <- B stopped as
soon as an NA was encountered in an index so subsequent non-NA
indices were ignored. (PR#7210)
o Fixed bug in handling of lwd=NA in contour().
o is.na() was returning undefined results on nested lists.
CHANGES IN R VERSION 1.9.1
NEW FEATURES
o as.Date() now has a method for "POSIXlt" objects.
o mean() has a method for "difftime" objects and so summary()
works for such objects.
o legend() has a new argument 'pt.cex'.
o plot.ts() has more arguments, particularly 'yax.flip'.
o heatmap() has a new 'keep.dendro' argument.
o The default barplot method now handles vectors and 1-d arrays
(e.g., obtained by table()) the same, and uses grey instead of
heat color palettes in these cases. (Also fixes PR#6776.)
o nls() now looks for variables and functions in its formula in
the environment of the formula before the search path, in the
same way lm() etc look for variables in their formulae.
INSTALLATION ISSUES
o src/modules/X11/dataentry.c would not build on some XFree
4.4.0 systems. (This is a bug in their header files but we have
added a workaround.)
o Building with gcc/g77 3.4.0 on ix86 platforms failed to produce
a working build: the critical LAPACK routines are now compiled
with -ffloat-store.
o Added patches to enable 64-bit builds on AIX 5.1: see the R-admin
manual for details.
o Added some patches to allow non-IEEE-754 installations to work
reasonably well. (Infs and NAs are still not handled properly
in complex arithmetic and functions such as sin(). See also
Deprecated, as support for non-IEEE-754 installations is about
to be removed.)
o Installation will now work in Estonian (et_EE*) locales, which
sort z before u. (PR#6958)
DEPRECATED & DEFUNCT
o Support for non-IEEE-754 arithmetic (which has been untested
for some time) will be removed in the next full release.
o Direct use of R INSTALL|REMOVE|BATCH|COMPILE|SHLIB is
deprecated: use R CMD instead.
o The gnome/GNOME graphics device is deprecated and will be
removed in the next full release.
BUG FIXES
o pbinom(q, N, prob) is now more accurate when prob is close to 0.
(PR#6757)
o pcauchy(x, .., log.p) is now more accurate for large x,
particularly when log.p = TRUE. (PR#6756)
o pgeom(q, prob, lower.tail, log.p) is now (sometimes much) more
accurate when prob is very small. (PR#6792)
The code for pgeom(prob=1) assumed IEEE 754 arithmetic, and
gave NaNs under gcc 3.4.0 -fPIC, for example.
o makeARIMA() was not handling an ARMA(0, 0) model correctly.
o as.Date() was failing on factors. (PR#6779)
o min(), max() and range() were failing on "difftime" objects.
o as.data.frame.list() could fail on some unusual list names.
(PR#6782)
o type.convert() ignored na.strings when no conversion was done.
(PR#6781, not needed for its primary use in read.table.)
o Fixed a clipping problem in the quartz() device.
o Subsetting a factor swapped the order of the attributes, which
identical() cares about. (PR#6799)
o The L-BFGS-B option of optim() apparently needs part of its
workspace zeroed. (PR#6720)
o extractAIC.survreg() needed updating.
o When using the header Rmath.h in standalone mode, the case where
TRUE, FALSE are already defined is now handled correctly.
o Package utils now exports several functions that are needed for
writing Sweave drivers.
o Comparison of two lists/expressions was giving nonsensical
(and often random) answers, and is now an error.
o The C-level function ncols was returning a random answer
(often 0) for a 1D array. This caused model.matrix to
misbehave (perhaps segfault) if a term was a 1D array. (PR#6838)
o The configure script now finds the pdf viewers ggv and gpdf.
o Workaround for the problems strptime on MacOS X has with dates
before 1900.
o 'R CMD build' works in a directory whose path contains spaces.
(PR#6830 under Unix/Linux: it already worked under Windows.)
Also 'R CMD check'.
o mosaicplot() stops cleanly if given a table containing missing values.
o install.packages() from a local CRAN was broken.
o bxp() fixed for e.g., boxplot(..., border=2:4)
o approx(list(x=rep(NaN,9), y=1:9), xout=NaN) does not seg.fault
anymore (PR#6809).
o plot(1, pch=NA) does not give an error anymore and
plot(1:2, pch=c("o",NA)) only prints one symbol (PR#6876).
o diffinv(matrix(3, 7,0)) now works.
o plot.ts(z) for multivariate 'z' now properly draws all 'nc' xlab`s
when nc > 1 and obeys 'ann=FALSE' or 'axes=FALSE'.
o aggregate(.data.frame) failed if the answer would have had one
row.
o recordPlot() and replayPlot() failed to duplicate the display
list, so further plotting altered the saved or replayed object.
o Assignments of the form adf[i,j] <- value now accept a
data-frame value as well as a list value.
o dir.create() sometimes erroneously continued to report a directory
already existed after the first instance. (PR#6892)
o arima.sim() allows a null model.
o which.min() & which.max()'s C code now PROTECT()'s its result.
o Building standalone nmath did not support some of the DEBUG options.
o mle() got confused if start value list was not in same order as
arguments of likelihood function (reported by Ben Bolker)
o backsolve(r, x, k) now allows k < nrow(x) - as its documentation
always claimed.
o update.packages("mgcv") and old.packages(*) now give a better error
message; and installed.packages("mgcv") properly returns <empty>.
o stats:::as.dendrogram.hclust() is documented and no longer re-sorts
the two children at each node. This fixes as.dendrogram(hh) for
the case where hh is a "reordered" hclust object.
plot.dendrogram(x) now draws leaves 'x' more sensibly.
reorder.dendrogram() now results in a dendrogram with correct
"midpoint"s, and hence reordered dendrograms are plotted correctly.
stats:::midcache.dendrogram() and hence the reorder() and rev()
dendrogram methods do not return bloated dendrograms.
o heatmap(*, labRow=., labCol=.) now also reorders the labels when
specified---not only when using default labels.
o Copying lattice (grid) output to another device now works again
(There were intermittent problems in 1.9.0 - PR#6915, #6947/8.)
o hist() uses a more robust choice of its 'diddle' factor, used
to detect if an observation is on a bin boundary. (PR#6931)
o jitter(x) now returns x when length(x) == 0.
o Under some rare circumstances the locale-specific tables used by
the perl=TRUE option to grep() etc were being corrupted and so
matches were missed.
o qbinom(*, prob = 0, lower.tail = FALSE) now properly gives 0.
(PR#6972)
o Class "octmode" needed a "[" method to preserve the class: see
example(file.info) for an example.
CHANGES IN R VERSION 1.9.0
USER-VISIBLE CHANGES
o Underscore '_' is now allowed in syntactically valid names, and
make.names() no longer changes underscores. Very old code
that makes use of underscore for assignment may now give
confusing error messages.
o Package 'base' has been split into packages 'base', 'graphics',
'stats' and 'utils'. All four are loaded in a default
installation, but the separation allows a 'lean and mean'
version of R to be used for tasks such as building indices.
Packages ctest, eda, modreg, mva, nls, stepfun and ts have been
merged into stats, and lqs has been returned to MASS. In all
cases a stub has been left that will issue a warning and ensure
that the appropriate new home is loaded. All the time series
datasets have been moved to package stats. Sweave has been
moved to utils.
Package mle has been moved to stats4 which will become the
central place for statistical S4 classes and methods
distributed with base R. Package mle remains as a stub.
Users may notice that code in .Rprofile is run with only the
new base loaded and so functions may now not be found. For
example, ps.options(horizontal = TRUE) should be preceded by
library(graphics) or called as graphics::ps.options or,
better, set as a hook -- see ?setHook.
o There has been a concerted effort to speed up the startup of
an R session: it now takes about 2/3rds of the time of 1.8.1.
o A warning is issued at startup in a UTF-8 locale, as currently R
only supports single-byte encodings.
NEW FEATURES
o $, $<-, [[, [[<- can be applied to environments. Only character
arguments are allowed and no partial matching is done. The
semantics are basically that of get/assign to the environment with
inherits=FALSE.
o There are now print() and [ methods for "acf" objects.
o aov() will now handle singular Error() models, with a warning.
o arima() allows models with no free parameters to be fitted (to
find log-likelihood and AIC values, thanks to Rob Hyndman).
o array() and matrix() now allow 0-length `data' arguments for
compatibility with S.
o as.data.frame() now has a method for arrays.
o as.matrix.data.frame() now coerces an all-logical data frame
to a logical matrix.
o New function assignInNamespace() parallelling fixInNamespace.
o There is a new function contourLines() to produce contour
lines (but not draw anything). This makes the CRAN package
clines (with its clines() function) redundant.
o D(), deriv(), etc now also differentiate asin(), acos(), atan(),
(thanks to a contribution of Kasper Kristensen).
o The `package' argument to data() is no longer allowed to be a
(unquoted) name and so can be a variable name or a quoted
character string.
o There is a new class "Date" to represent dates (without times)
plus many utility functions similar to those for date-times.
See ?Date.
o Deparsing (including using dump() and dput()) an integer
vector now wraps it in as.integer() so it will be source()d
correctly. (Related to PR#4361.)
o .Deprecated() has a new argument `package' which is used in
the warning message for non-base packages.
o The print() method for "difftime" objects now handles arrays.
o dir.create() is now an internal function (rather than a call to
mkdir) on Unix as well as on Windows. There is now an option
to suppress warnings from mkdir, which may or may not have
been wanted.
o dist() has a new method to calculate Minkowski distances.
o expand.grid() returns appropriate array dimensions and dimnames
in the attribute "out.attrs", and this is used by the
predict() method for loess to return a suitable array.
o factanal(), loess() and princomp() now explicitly check for
numerical inputs; they might have silently coded factor
variables in formulae.
o New functions factorial(x) defined as gamma(x+1) and for
S-PLUS compatibility, lfactorial(x) defined as lgamma(x+1).
o findInterval(x, v) now allows +/-Inf values, and NAs in x.
o formula.default() now looks for a "terms" component before a
'formula' argument in the saved call: the component will have
`.' expanded and probably will have the original environment
set as its environment. And what it does is now documented.
o glm() arguments `etastart' and `mustart' are now evaluated via
the model frame in the same way as `subset' and `weights'.
o Functions grep(), regexpr(), sub() and gsub() now coerce their
arguments to character, rather than give an error.
The perl=TRUE argument now uses character tables prepared for
the locale currently in use each time it is used, rather than
those of the C locale.
o New functions head() and tail() in package `utils'.
(Based on a contribution by Patrick Burns.)
o legend() has a new argument 'text.col'.
o methods(class=) now checks for a matching generic, and so no
longer returns methods for non-visible generics (and
eliminates various mismatches).
o A new function mget() will retrieve multiple values from an
environment.
o model.frame() methods, for example those for "lm" and "glm",
pass relevant parts of ... onto the default method. (This has
long been documented but not done.) The default method is now
able to cope with model classes such as "lqs" and "ppr".
o nls() and ppr() have a `model' argument to allow the model frame
to be returned as part of the fitted object.
o "POSIXct" objects can now have a "tzone" attribute that
determines how they will be converted and printed. This means
that date-time objects which have a timezone specified will
generally be regarded as in their original time zone.
o postscript() device output has been modified to work around
rounding errors in low-precision calculations in gs >= 8.11.
(PR#5285, which is not a bug in R.)
It is now documented how to use other Computer Modern fonts,
for example italic rather than slanted.
o ppr() now fully supports categorical explanatory variables,
ppr() is now interruptible at suitable places in the
underlying FORTRAN code.
o princomp() now warns if both `x' and `covmat' are supplied,
and returns scores only if the centring used is known.
o psigamma(x, deriv=0), a new function generalizes, digamma() etc.
All these (psigamma, digamma, trigamma,...) now also work for x < 0.
o pchisq(*, ncp > 0) and hence qchisq() now work with much higher
values of ncp; it has become much more accurate in the left tail.
o read.table() now allows embedded newlines in quoted fields. (PR#4555)
o rep.default(0-length-vector, length.out=n) now gives a vector
of length n and not length 0, for compatibility with S.
If both `each' and `length.out' have been specified, it now
recycles rather than fills with NAs for S compatibility.
If both `times' and `length.out' have been specified, `times'
is now ignored for S compatibility. (Previously padding with
NAs was used.)
The "POSIXct" and "POSIXlt" methods for rep() now pass ... on
to the default method (as expected by PR#5818).
o rgb2hsv() is new, an R interface the C API function with the same name.
o User hooks can be set for onLoad, library, detach and
onUnload of packages/namespaces: see ?setHook.
o save() default arguments can now be set using option
"save.defaults", which is also used by save.image() if option
"save.image.defaults" is not present.
o New function shQuote() to quote strings to be passed to OS shells.
o sink() now has a split= argument to direct output to both the
sink and the current output connection.
o split.screen() now works for multiple devices at once.
o On some OSes (including Windows and those using glibc)
strptime() did not validate dates correctly, so we have added
extra code to do so. However, this cannot correct scanning
errors in the OS's strptime (although we have been able to
work around these on Windows). Some examples are now tested for
during configuration.
o strsplit() now has `fixed' and `perl' arguments and
split="" is optimized.
o subset() now allows a `drop' argument which is passed on to
the indexing method for data frames.
o termplot() has an option to smooth the partial residuals.
o varimax() and promax() add class "loadings" to their loadings
component.
o Model fits now add a "dataClasses" attribute to the terms, which
can be used to check that the variables supplied for
prediction are of the same type as those used for fitting.
(It is currently used by predict() methods for classes "lm",
"mlm", "glm" and "ppr", as well as methods in packages MASS,
rpart and tree.)
o New command-line argument --max-ppsize allows the size of the
pointer protection stack to be set higher than the previous
limit of 10000.
o The fonts on an X11() device (also jpeg() and png() on Unix)
can be specified by a new argument `fonts' defaulting to the
value of a new option "X11fonts".
o New functions in the tools package: pkgDepends, getDepList and
installFoundDepends. These provide functionality for assessing
dependencies and the availability of them (either locally or
from on-line repositories).
o The parsed contents of a NAMESPACE file are now stored at
installation and if available used to speed loading the
package, so packages with namespaces should be reinstalled.
o Argument `asp' although not a graphics parameter is accepted
in the ... of graphics functions without a warning. It now
works as expected in contour().
o Package stats4 exports S4 generics for AIC() and BIC().
o The Mac OS X version now produces an R framework for easier linking
of R into other programs. As a result, R.app is now relocatable.
o Added experimental support for conditionals in NAMESPACE files.
o Added as.list.environment to coerce environments to lists
(efficiently).
o New function addmargins() in the stats package to add marginal
summaries to tables, e.g. row and column totals. (Based on a
contribution by Bendix Carstensen.)
o dendrogam edge and node labels can now be expressions (to be
plotted via stats:::plotNode called from plot.dendrogram).
The diamond frames around edge labels are more nicely scaled
horizontally.
o Methods defined in the methods package can now include
default expressions for arguments. If these arguments are
missing in the call, the defaults in the selected method will
override a default in the generic. See ?setMethod.
o Changes to package 'grid':
- Renamed push/pop.viewport() to push/popViewport().
- Added upViewport(), downViewport(), and seekViewport() to
allow creation and navigation of viewport tree
(rather than just viewport stack).
- Added id and id.lengths arguments to grid.polygon() to allow
multiple polygons within single grid.polygon() call.
- Added vpList(), vpStack(), vpTree(), and current.vpTree()
to allow creation of viewport "bundles" that may be pushed
at once (lists are pushed in parallel, stacks in series).
current.vpTree() returns the current viewport tree.
- Added vpPath() to allow specification of viewport path
in downViewport() and seekViewport().
See ?viewports for an example of its use.
NOTE: it is also possible to specify a path directly,
e.g., something like "vp1::vp2", but this is only
advised for interactive use (in case I decide to change the
separator :: in later versions).
- Added "just" argument to grid.layout() to allow justification
of layout relative to parent viewport *IF* the layout is not
the same size as the viewport. There's an example in
help(grid.layout).
- Allowed the "vp" slot in a grob to be a viewport name or a
vpPath. The interpretation of these new alternatives is to
call downViewport() with the name or vpPath before drawing the
grob and upViewport() the appropriate amount after drawing the
grob. Here's an example of the possible usage:
pushViewport(viewport(w=.5, h=.5, name="A"))
grid.rect()
pushViewport(viewport(w=.5, h=.5, name="B"))
grid.rect(gp=gpar(col="grey"))
upViewport(2)
grid.rect(vp="A", gp=gpar(fill="red"))
grid.rect(vp=vpPath("A", "B"), gp=gpar(fill="blue"))
- Added engine.display.list() function. This allows the user to
tell grid NOT to use the graphics engine display list and to handle
ALL redraws using its own display list (including redraws after
device resizes and copies).
This provides a way to avoid some of the problems with resizing
a device when you have used grid.convert(), or the gridBase package,
or even base functions such as legend().
There is a document discussing the use of display lists in grid
on the grid web site
(http://www.stat.auckland.ac.nz/~paul/grid/grid.html)
- Changed the implementation of grob objects. They are no longer
implemented as external references. They are now regular R objects
which copy-by-value. This means that they can be saved/loaded
like normal R objects. In order to retain some existing grob
behaviour, the following changes were necessary:
+ grobs all now have a "name" slot. The grob name is used to
uniquely identify a "drawn" grob (i.e., a grob on the display
list).
+ grid.edit() and grid.pack() now take a grob name as the first
argument instead of a grob. (Actually, they take a gPath -
see below)
+ the "grobwidth" and "grobheight" units take either a grob
OR a grob name (actually a gPath - see below). Only in the
latter case will the unit be updated if the grob "pointed to"
is modified.
In addition, the following features are now possible with grobs:
+ grobs now save()/load() like any normal R object.
+ many grid.*() functions now have a *Grob() counterpart. The
grid.*() version is used for its side-effect of drawing
something or modifying something which has been drawn; the
*Grob() version is used for its return value, which is a grob.
This makes it more convenient to just work with grob
objects without producing any graphical output
(by using the *Grob() functions).
+ there is a gTree object (derived from grob), which is a grob
that can have children. A gTree also has a "childrenvp" slot
which is a viewport which is pushed and then "up"ed before the
children are drawn; this allows the children of a gTree to
place themselves somewhere in the viewports specified in the
childrenvp by having a vpPath in their vp slot.
+ there is a gPath object, which is essentially a concatenation
of grob names. This is used to specify the child of
(a child of ...) a gTree.
+ there is a new API for creating/accessing/modifying grob objects:
grid.add(), grid.remove(), grid.edit(), grid.get() (and their
*Grob() counterparts can be used to add, remove, edit, or extract
a grob or the child of a gTree. NOTE: the new grid.edit() API
is incompatible with the previous version.
- Added stringWidth(), stringHeight(), grobWidth(), and grobHeight()
convenience functions (they produce "strwidth", "strheight",
"grobwidth", and "grobheight" unit objects, respectively).
- Allowed viewports to turn off clipping altogether.
Possible settings for viewport clip arg are now:
"on" = clip to the viewport (was TRUE)
"inherit" = clip to whatever parent says (was FALSE)
"off" = turn off clipping
Still accept logical values (and NA maps to "off")
UTILITIES
o R CMD check now runs the (Rd) examples with default RNGkind
(uniform & normal) and set.seed(1).
example(*, setRNG = TRUE) does the same.
o undoc() in package `tools' has a new default of `use.values =
NULL' which produces a warning whenever the default values of
function arguments differ between documentation and code.
Note that this affects "R CMD check" as well.
o Testing examples via massage-examples.pl (as used by R CMD
check) now restores the search path after every help file.
o checkS3methods() in package 'tools' now also looks for generics
in the loaded namespaces/packages listed in the Depends fields
of the package's DESCRIPTION file when testing an installed
package.
o The DESCRIPTION file of packages may contain a 'Suggests:'
field for packages that are only used in examples or
vignettes.
o Added an option to package.dependencies() to handle the
'Suggests' levels of dependencies.
o Vignette dependencies can now be checked and obtained via
vignetteDepends.
o Option 'repositories' to list URLs for package repositories
added.
o package.description() has been replaced by packageDescription().
o R CMD INSTALL/build now skip Subversion's .svn directories as
well as CVS directories.
C-LEVEL FACILITIES
o arraySubscript and vectorSubscript take a new argument which
is a function pointer that provides access to character
strings (such as the names vector) rather than assuming these
are passed in.
o R_CheckUserInterrupt is now described in `Writing R Extensions'
and there is a new equivalent subroutine rchkusr for calling
from FORTRAN code.
o hsv2rgb and rgb2hsv are newly in the C API.
o Salloc and Srealloc are provided in S.h as wrappers for S_alloc
and S_realloc, since current S versions use these forms.
o The type used for vector lengths is now R_len_t rather than
int, to allow for a future change.
o The internal header nmath/dpq.h has slightly improved macros
R_DT_val() and R_DT_Cval(), a new R_D_LExp() and improved
R_DT_log() and R_DT_Clog(); this improves accuracy in several
[dpq]-functions {for "extreme" arguments}.
DEPRECATED & DEFUNCT
o print.coefmat() is defunct, replaced by printCoefmat().
o codes() and codes<-() are defunct.
o anovalist.lm (replaced in 1.2.0) is now defunct.
o glm.fit.null(), lm.fit.null() and lm.wfit.null() are defunct.
o print.atomic() is defunct.
o The command-line arguments --nsize and --vsize are no longer
recognized as synonyms for --min-nsize and --min-vsize (which
replaced them in 1.2.0).
o Unnecessary methods coef.{g}lm and fitted.{g}lm have been
removed: they were each identical to the default method.
o La.eigen() is deprecated now eigen() uses LAPACK by default.
o tetragamma() and pentagamma() are deprecated, since they are
equivalent to psigamma(, deriv=2) and psigamma(, deriv=3).
o LTRUE/LFALSE in Rmath.h have been removed: they were
deprecated in 1.2.0.
o package.contents() and package.description() have been deprecated.
INSTALLATION CHANGES
o The defaults for configure are now --without-zlib
--without-bzlib --without-pcre.
The included PCRE sources have been updated to version 4.5 and
PCRE >= 4.0 is now required if --with-pcre is used.
The included zlib sources have been updated to 1.2.1, and this
is now required if --with-zlib is used.
o configure no longer lists bzip2 and PCRE as `additional
capabilities' as all builds of R have had them since 1.7.0.
o --with-blas=goto to use K. Goto's optimized BLAS will now work.
BUG FIXES
o When lm.{w}fit() disregarded arguments in ... they reported
the values and not the names.
o lm(singular.ok = FALSE) was looking for 0 rank, not rank < p.
o The substitution code for strptime in the sources no longer
follows glibc in silently `correcting' invalid inputs.
o The cor() function did not remove missing values in the
non-Pearson case.
o [l]choose() use a more accurate formula which also slightly
improves p- and qhyper(); choose(n, k) now returns 0 instead
of NaN for k < 0 or > n.
o find(simple.words=TRUE) (the default) was still using regular
expressions for e.g. "+" and "*". Also, it checked the mode
only of the first object matching a regular expression found
in a package.
o Memory leaks in [dpq]wilcox and [dqr]signrank have been plugged.
These only occurred when multiple values of m or n > 50 were
used in a single call. (PR#5314, plus another potential leak.)
o Non-finite input values to eigen(), La.eigen(), svd() and
La.svd() are now errors: they often caused infinite
looping. (PR#5406, PR#4366, PR#3723: the fix for 3723/4366
returned a vector of NAs, not a matrix, for the eigenvectors.)
o stepfun(x,y) now gives an error when `x' has length 0 instead
of an invalid result (that could lead to a segmentation
fault).
o buildVignettes() uses file.remove() instead of unlink() to
remove temporary files.
o methods(class = "lqs") does not produce extraneous entries anymore.
o Directly calling a method that uses NextMethod() no longer
produces the erroneous error message 'function is not a
closure'.
o chisq.test(x, simulate.p.value = TRUE) could hang in an infinite
loop or segfault, as r2dtable() did, when the entries in x where
large. (PR#5701)
o fisher.test(x) could give a P-value of 'Inf' in similar cases which
now result in an error (PR#4688). It silently truncated
non-integer 'x' instead of rounding.
o cutree(a, h=h) silently gave wrong results when 'a' was an
agnes object; now gives an error and reminds of as.hclust().
o postscript() could crash if given a font value outside the
valid range 1...5.
o qchisq(1-e, .., ncp=.) did not terminate for small e.
(PR#6421 (PR#875))
o contrasts() turns a logical variable into a factor. This now
always has levels c("FALSE", "TRUE") even if only one (or
none) of these occur in the variable.
o model.frame()'s lm and glm methods had 'data' and 'na.action'
arguments which they ignored and have been removed.
o The defaults data=list() in lm() and glm() could never be
used and have been removed. glm had na.action=na.fail, again
never used.
o The internal tools function for listing all internal S3 generics
was omitting all the members of the S3 group generics, which
also accept methods for members.
o Some BLASes were returning NA %*% 0 as 0 and some as NA. Now
slower but more careful code is used if NAs are present. (PR#4582)
o package.skeleton() no longer generates invalid filenames for
code and help files. Also, care is taken not to generate
filenames that differ only by case.
o pairs() now respects axis graphical parameters such as
cex.main, font.main and las.
o Saving images of packages with namespaces (such as mle) was
not compressing the image.
o When formula.default() returned a terms object, it returned a
result of class c("terms", "formula") with different
subsetting rules from an object of class "formula".
o The standalone Rmath library did not build correctly on systems
with inaccurate log1p.
o Specifying asp is now respected in calls like plot(1, 10, asp=1)
with zero range on both axes.
o outer() called rep() with an argument the generic does not
have, and discarded the class of the answer.
o object.size() now returns a real (not integer) answer and so
can cope with objects occupying more than 2Gb.
o Lookups base:: and ::: were not confining their search to the
named package/namespace.
o qbinom() was returning NaN for prob = 0 or 1 or size = 0 even
though the result is well-defined. (In part, PR#5900.)
o par(mgp)[2] was being interpreted as relative to par(mgp)[3].
(PR#6045)
o Versioned install was broken both with and without namespaces:
no R code was loaded.
o methods(), getS3method() and the registration of S3 methods in
namespaces were broken if the S3 generic was converted into an
S4 generic by setting an S4 method.
o Title and copyright holder of the reference manual are now in
sync with the citation() command.
o The validation code for POSIXlt dates and hence
seq(, by="DSTdays") now works for large mday values (not
just those in -1000...1000). (PR#6212)
o The print() method for data frames now copes with data frames
containing arrays (other than matrices).
o texi2dvi() and buildVignettes() use clean=FALSE as default
because the option is not supported on some Solaris
machines. For buildVignettes() this makes no difference as it
uses an internal cleanup mechanism.
o The biplot() method for "prcomp" was not registered nor exported.
(PR#6425)
o Latex conversion of .Rd files was missing newline before
\end{Section} etc which occasionally gave problems, as fixed for
some other \end{Foo} in 1.8.1. (PR#5645)
o Work around a glibc bug to make the %Z format usable in strftime().
o The glm method for rstandard() was wrongly scaled for cases where
summary(model)$dispersion != 1.
o Calling princomp() with a covariance matrix (rather than a
list) failed to predict scores rather than predict NA as
intended. (PR#6452)
o termplot() is more tolerant of variables not in the data= argument.
(PR#6327)
o isoreg() could segfault on monotone input sequences. (PR#6494)
o Rdconv detected \link{\url{}} only very slowly. (PR#6496)
o aov() with Error() term and no intercept incorrectly assigned
terms to strata. (PR#6510)
o ftable() incorrectly handled arguments named "x". (PR#6541)
o vector(), matrix(), array() and their internal equivalents
report correctly that the number of elements specified was too
large (rather than reporting it as negative).
o Minor copy-paste error in example(names). (PR#6594)
o length<-() now works correctly on factors (and is now generic
with a method for factors).
o x <- 2^32; x:(x+3) no longer generates an error (but gives a
result of type "double").
o pgamma(30, 100, lower=FALSE, log=TRUE) is not quite 0, now.
pgamma(x, alph) now only uses a normal approximation for
alph > 1e5 instead of alph > 1000. This also improves the accuracy
of ppois().
o qgamma() now does one or more final Newton steps, increasing
accuracy from around 2e-8 to 3e-16 in some cases. (PR#2214).
It allows values p close to 1 not returning Inf, with accuracy for
'lower=FALSE', and values close to 0 not returning 0 for
'log=TRUE'. These also apply to qchisq(), e.g.,
qchisq(1e-13, 4, lower=FALSE) is now finite and
qchisq(1e-101, 1) is positive.
o gamma(-n) now gives NaN for all negative integers -n.
o The Unix version of browseURL() now protects the URL from the
shell, for example allowing & and $ to occur in the URL.
It was incorrectly attempting to use -remote "openURL()" for
unknown browsers.
o extractAIC.coxph() works around an inconsistency in the
$loglik output from coxph. (PR#6646)
o stem() was running into integer overflows with nearly-constant
inputs, and scaling badly for constant ones. (Partly PR#6645)
o system() under Unix was losing the 8095th char if the output
was split. (PR#6624)
o plot.lm() gave incorrect results if there were zero weights.
(PR#6640)
o Binary operators warned for inconsistent lengths on vector op
vector operations, but not on vector op matrix ones. (PR#6633
and more.)
Comparison operators did not warn about inconsistent lengths
for real vectors, but did for integer, logical and character
vectors.
o spec.pgram(x, ..., pad, fast, ...) computed the periodogram with
a bias (downward) whenever 'pad > 0' (non-default) or 'fast = TRUE'
(default) and nextn(n) > n where n = length(x); similarly for
'df' (approximate degrees of freedom for chisq).
o dgamma(0, a) now gives Inf for a < 1 (instead of NaN), and
so does dchisq(0, 2*a, ncp).
o pcauchy() is now correct in the extreme tails.
o file.copy() did not check that any existing `from' file had
been truncated before appending the new contents.
o The QC files now check that their file operations succeeded.
o replicate() worked by making the supplied expression the
body of an anonymous function(x), leading to a variable
capture issue. Now, function(...) is used instead.
o chisq.test(simulate.p.value = TRUE) was returning slightly
incorrect p values, notably p = 0 when the data gave the most
extreme value.
o terms.formula(simplify = TRUE) was losing offset terms.
Multiple offset terms were not being removed correctly if two
of them appeared first or last in the formula. (PR#6656)
o Rd conversion to latex did not add a new line before
\end{Section} in more cases than were corrected in 1.8.1.
o split.default() dropped NA levels in its internal code but
returned them as NA in all components in the interpreted code
for factors. (PR#6672)
o points.formula() had problems if there was a subset argument
and no data argument. (PR#6652)
o as.dist() does a bit more checking of its first argument and now
warns when applied to non-square matrices.
o mle() gives a more understandable error message when its 'start'
argument is not ok.
o All uses of dir.create() check the return value.
download.packages() checks that destdir exists and is a directory.
o Methods dispatch corrects an error that failed to find
methods for classes that extend sealed classes (class unions
that contain basic classes, e.g.).
o Sweave no longer wraps the output of code chunks with
echo=false and results=tex in Schunk environments.
o termplot() handles models with missing data better, especially
with na.action=na.exclude.
o 1:2 * 1e-100 now prints with correct number of spaces.
o Negative subscripts that were out of range or NA were not handled
correctly. Mixing negative and NA subscripts is now caught as
an error: it was not caught on some platforms and segfaulted
on others.
o gzfile() connections had trouble at EOF when used on uncompressed
file.
o The Unix version of dataentry segfaulted if the `Copy' button
was used. (PR#6605)
o unlist on lists containing expressions now works (PR#5628)
o D(), deriv() and deriv3() now also can deal with gamma and lgamma.
o The X11 module can now be built against XFree86 4.4.0 headers (still
with some warnings).
o seq.POSIXt(from, to, by="DSTdays") was shorter than expected
for rare times in the UK time zone. (PR#4558)
o c/rbind() did not support vectors/matrices of mode "list". (PR#6702)
o summary() methods for POSIX[cl]t and Date classes coerced the
number of NAs to a date on printing.
o KalmanSmooth would sometimes return NA values with NA inputs.
(PR#6738)
o fligner.test() worked correctly only if data were already sorted
by group levels. (PR#6739)
**************************************************
* *
* 1.8 SERIES NEWS *
* *
**************************************************
CHANGES IN R VERSION 1.8.1
NEW FEATURES
o There is now a "Complex" S3 group generic (a side-effect of
fixing up the corresponding S4 group generic).
o help("regex") now gives a description of the regular expressions
used in R.
o The startup message now shows the R Foundation as copyright
holder, and includes the R ISBN number and a pointer to the new
citation() function.
o The solve() function now uses the `tol' argument for all
non-complex cases. The default tolerance for LINPACK is 1e-7,
as before. For LAPACK it currently is .Machine$double.eps but
may be changed in later versions of R.
o help.search() now defaults to agrep = FALSE when keyword= is
specified, since no one wants fuzzy matching of categories.
o Function texi2dvi() in package tools can be used to compile
latex files from within R, provided the OS has a command
texi2dvi or texify.
o Objects with formal S4 classes saved in pre-1.8 versions and
loaded into the current version have incompatible class
attributes (no package information). A new function,
fixPre1.8() in package methods, will fix the class attributes.
See the help for this function.
o heatmap() allows Rowv/Colv = NA, suppressing the corresponding
dendrogram.
o An "antifeature": Tcl 8.0 is now officially unsupported. In 1.8.0
it just didn't work. This very old version lacks several features
that are needed for the new version of the tcltk package. R will
still build the tcltk package against Tcl 8.0 but the resulting
package will not load.
BUG FIXES
o symnum(x) now behaves as documented when length(x) == 0 and uses
lower.triangular = FALSE for logical arrays.
o c() now has a method for "noquote" objects and hence works as
expected.
o split(1:10, c(1,2)) no longer gives a spurious warning.
o The "Complex" S4 group generic now works.
o abbreviate() doesn't get into infinite loops on input that differs
only by leading/trailing space
o Added check for user interrupt in Rvprintf to allow printing to be
interrupted.
o Fixed bug that would cause segfault on protect stack overflow.
o crossprod() on matrices with zero extents would return an
uninitialized matrix (rather than one filled with zeros).
o DF[[i,j]] for a data frame used row j and col i, not as intended
row i and col j.
o Even more user errors in recursive indexing of lists are now
caught. (PR#4486)
o cor(<matrix>, use = "pairwise") gave wrong result in 1.8.0 (only).
(PR#4646)
o merge.data.frame() could give incorrect names when one of the
arguments had only one column. (PR#4299)
o Subsetting a one-dimensional array dropped dimensions even when
they were not of length one. (Related to PR#4110)
o The plot() method for `ecdf' objects, plot.ecdf(), now allows to
set a `ylab' argument (different from the default).
o cor.test(*, method="spearman") gave wrong results `randomly'
(because of a wrong type passed to C; PR#4718).
o dist() objects with NA's didn't print these, now do. (PR#4866).
o regexpr(fixed = TRUE) returned 0-based indices.
o df[, length_1_index] <- value did not recycle short rhs. (PR#4820)
o median() no longer `works' for odd-length factor variables.
o packageStatus() is more robust to failing to contact a
repository, and contacts the correct paths in the repositories
under Windows.
o .setOldIs (methods) contained a typo stopping POSIXct objects (etc)
being included in formal classes.
o terms() sometimes removed offset() terms incorrectly, since it
counted by variables and not terms. Its "offset" attribute
was incorrectly documented as referring to terms not
variables. (Related to PR#4941)
o buildVignettes() and pkgVignettes() in package tools are now
documented. The call to texi2dvi is wrapped in the new
function texi2dvi() which also works on Windows.
o hclust() was sometimes not finding the correct inter-cluster
distances with non-monotone methods. (PR#4195)
o plot.hclust() now tolerates mode changes on dumped objects. (PR#4361)
o prompt() no longer insists files are in the current directory.
(PR#4978)
o filter() did not use init in reverse order as documented. (PR#5017)
o contrasts<-() and model.matrix() now have sanity checks that
factors having at least 2 levels (or one level and a contrast
matrix): model.matrix() gave nonsensical results for 0-level
factors.
o writeChar() could segfault if more characters were requested
than exist. (PR#5090)
o round() and signif() dropped attributes with 0-length inputs,
only. (PR#4710)
o The default graphics device in the GNOME interface was gtk,
which is no longer in the base package. It is now X11.
o The print button on the toolbar of the GNOME graphics device
did not work.
o The example code on the man page for TkWidgetcmds had not been
updated after the change that made tkget (et al.) return
tclObj objects, so the "Submit" button didn't work.
o Rd conversion to latex did not add a new line before
\end{Section} for the section environments, which caused
problems if the last thing in a section was \preformatted{}
(and potentially elsewhere).
o Under some circumstances mosaicplot() failed if main was
supplied as it was passed on to model.frame.default().
o Conversion to POSIXlt (including printing) of POSIXct dates
before 1902 and after 2038 computed which were leap years from
(year-1900) so got some xx00 years wrong.
CHANGES IN R VERSION 1.8.0
MACOS CHANGES
o As from this release there is only one R port for the
Macintosh, which runs only on Mac OS X. (The `Carbon' port has
been discontinued, and the `Darwin' port is part of the new
version.) The current version can be run either as a
command-line application or as an `Aqua' console. There is a
`Quartz' device quartz(), and the download and installation of
both source and binary packages is supported from the Aqua
console. Those CRAN and BioC packages which build under Mac OS X
have binary versions updated daily.
USER-VISIBLE CHANGES
o The defaults for glm.control(epsilon=1e-8, maxit=25) have been
tightened: this will produce more accurate results, slightly
slower.
o sub, gsub, grep, regexpr, chartr, tolower, toupper, substr,
substring, abbreviate and strsplit now handle missing values
differently from "NA".
o Saving data containing name space references no longer warns
about name spaces possibly being unavailable on load.
o On Unix-like systems interrupt signals now set a flag that is
checked periodically rather than calling longjmp from the
signal handler. This is analogous to the behavior on Windows.
This reduces responsiveness to interrupts but prevents bugs
caused by interrupting computations in a way that leaves the
system in an inconsistent state. It also reduces the number
of system calls, which can speed up computations on some
platforms and make R more usable with systems like Mosix.
CHANGES TO THE LANGUAGE
o Error and warning handling has been modified to incorporate a
flexible condition handling mechanism. See the online
documentation of 'tryCatch' and 'signalCondition'. Code that
does not use these new facilities should remain unaffected.
o A triple colon operator can be used to access values of internal
variables in a name space (i.e. a:::b is the value of the internal
variable b in name space a).
o Non-syntactic variable names can now be specified by inclusion
between backticks `Like This`. The deparse() code has been
changed to output non-syntactical names with this convention,
when they occur as operands in expressions. This is controlled
by a `backtick' argument, which is by default TRUE for
composite expressions and FALSE for single symbols. This
should give minimal interference with existing code.
o Variables in formulae can be quoted by backticks, and such
formulae can be used in the common model-fitting functions.
terms.formula() will quote (by backticks) non-syntactic names
in its "term.labels" attribute. [Note that other code using
terms objects may expect syntactic names and/or not accept
quoted names: such code will still work if the new feature is
not used.]
NEW FEATURES
o New function bquote() does partial substitution like LISP backquote.
o capture.output() takes arbitrary connections for `file' argument.
o contr.poly() has a new `scores' argument to use as the base set
for the polynomials.
o cor() has a new argument `method = c("pearson","spearman","kendall")'
as cor.test() did forever. The two rank based measures do work with
all three missing value strategies.
o New utility function cov2cor() {Cov -> Corr matrix}.
o cut.POSIXt() now allows `breaks' to be more general intervals
as allowed for the `by' argument to seq.POSIXt().
o data() now has an 'envir' argument.
o det() uses an LU decomposition and LAPACK. The `method'
argument to det() no longer has any effect.
o dev.control() now accepts "enable" as well as "inhibit".
(Wishlist PR#3424)
o *, - and / work more generally on "difftime" objects, which now
have a diff() method.
o dt(*, ncp = V) is now implemented, thanks to Claus Ekstrom.
o dump() only quotes object names in the file where necessary.
o eval() of a promise forces the promise
o file.path() now returns an empty character vector if given at
least one zero-length argument.
o format() and hence print() make an effort to handle corrupt
data frames, with a warning.
o format.info() now also works with `nsmall' in analogy with
format.default().
o gamma(n) is very slightly more precise for integer n in 11:50.
o ? and help() will accept more un-quoted arguments, e.g. NULL.
o The "?" operator has new forms for querying documentation on
S4 methods. See the online documentation.
o New argument frame.plot = axes (== TRUE) for filled.contour().
o New argument fixed = TRUE for grep() and regexpr() to avoid the
need to escape strings to match.
o grep(x, ..., value = TRUE) preserves names of x.
o hist.POSIXt() can now pass arguments to hist.default()
o legend() and symbols() now make use of xy.coords() and accept
a wider range of coordinate specifications.
o Added function library.dynam.unload() to call dyn.unload() on
a loaded DLL and tidy up. This is called for all the standard
packages in namespaces with DLLs if their namespaces are unloaded.
o lm(singular.ok = FALSE) is now implemented.
o Empty lm() and glm() fits are now handled by the normal
code: there are no methods for classes "lm.null" and
"glm.null". Zero-rank fits are handled consistently.
o make.names() has improvements, and there is a new auxiliary
function make.unique(). (Based on code contributed by Tom
Minka, since converted to a .Internal function.) In
particular make.names() now recognises that names beginning
with a dot are valid and that reserved words are not.
o methods() has a print method which asterisks functions which
are not user-visible. methods(class = "foo") now lists
non-visible functions, and checks that there is a matching generic.
o model.matrix() now warns when it removes the response from the
rhs of the formula: that this happens is now documented on its
help page.
o New option `locatorBell' to control the confirmation beep
during the use of locator() and identify().
o New option("scipen") provides some user control over the
printing of numbers in fixed-point or exponential notation.
(Contributed by David Brahm.)
o plot.formula() now accepts horizontal=TRUE and works correctly
when boxplots are produced. (Wishlist PR#1207) The code has
been much simplified and corrected.
o polygon() and rect() now interpret density < 0 or NA to mean
filling (by colour) is desired: this allows filling and
shading to be mixed in one call, e.g. from legend().
o The predict() methods for classes lm, glm, mlm and lqs take a
`na.action' argument that controls how missing values in
`newdata' are handled (and defaults to predicting NA).
[Previously the value of getOption("na.action") was used and
this by default omitted cases with missing values, even if set
to `na.exclude'.]
o print.summary.glm() now reports omitted coefficients in the
same way as print.summary.lm(), and both show them as NAs in
the table of coefficients.
o print.table() has a new argument `zero.print' and is now
documented.
o rank(x, na.last = "keep") now preserves NAs in `x', and the
argument `ties.method' allows to use non-averaging ranks in the
presence of ties.
o read.table()'s 'as.is' argument can be character, naming columns
not to be converted.
o rep() is now a generic function, with default, POSIXct and
POSIXlt methods. For efficiency, the base code uses rep.int()
rather than rep() where possible.
o New function replicate() for repeated evaluation of expression
and collection of results, wrapping a common use of sapply()
for simulation purposes.
o rev() is now a generic function, with default and dendrogram
methods.
o serialize() and unserialize() functions are available for
low-level serialization to connections.
o socketSelect() allows waiting on multiple sockets.
o sort(method = "quick", decreasing = TRUE) is now implemented.
o sort.list() has methods "quick" (a wrapper for sort(method =
"quick", index.return = TRUE) and "radix" (a very fast method
for small integers). The default "shell" method works faster
on long vectors with many ties.
o stripchart() now has `log', `add' and `at' arguments.
o strsplit(x, *) now preserves names() but won't work for
non-character `x' anymore {formerly used as.character(x),
destroying names(x)}.
o textConnection() now has a local argument for use with output
connections. local = TRUE means the variable containing the
output is assigned in the frame of the caller.
o Using UseMethod() with more than two arguments now gives a
warning (as R-lang.texi has long claimed it did).
o New function vignette() for viewing or listing vignettes.
o which.min(x) and which.max(x) now preserve names.
o xy.coords() coerces "POSIXt" objects to "POSIXct", allowing
lines etc to added to plot.POSIXlt() plots.
o .Machine has a new entry, sizeof.pointer.
o .Random.seed is only looked for and stored in the user's
workspace. Previously the first place a variable of that name
was found on the search path was used.
o Subscripting for data.frames has been rationalized:
- Using a single argument now ignores any `drop' argument
(with a warning). Previously using `drop' inhibited list-like
subscripting.
- adf$name <- value now checks for the correct length of
`value', replicating a whole number of times if needed.
- adf[j] <- value and adf[[j]] <- value did not convert
character vectors to factors, but adf[,j] <- value did.
Now none do. Nor is a list `value' coerced to a data frame
(thereby coercing character elements to factors).
- Where replicating the replacement value a whole number of
times will produce the right number of values, this is
always done (rather than some times but not others).
- Replacement list values can include NULL elements.
- Subsetting a data frame can no longer produce duplicate
column names.
- Subsetting with drop=TRUE no longer sometimes drops
dimensions on matrix or data frame columns of the data frame.
- Attributes are no longer stripped when replacing part of a column.
- Columns added in replacement operations will always be
named, using the names of a list value if appropriate.
- as.data.frame.list() did not cope with list names such as
`check.rows', and formatting/printing data frames with such
column names now works.
- Row names in extraction are still made unique, but without
forcing them to be syntactic names.
- adf[x] <- list() failed if x was of length zero.
o Setting dimnames to a factor now coerces to character, as S
does. (Earlier versions of R used the internal codes.)
o When coercion of a list fails, a meaningful error message is given.
o Adding to NULL with [[ ]] generates a list if more than one
element is added (as S does).
o There is a new command-line flag --args that causes the rest of
the command line to be skipped (but recorded in commandArgs()
for further processing).
o S4 generic functions and method dispatch have been modified to
make the generic functions more self-contained (e.g., usable
in apply-type operations) and potentially to speed dispatch.
o The data editor is no longer limited to 65535 rows, and will
be substantially faster for large numbers of columns.
o Standalone Rmath now has a get_seed function as requested (PR#3160).
o GC timing is not enabled until the first call to gc.time(); it
can be disabled by calling gc.time(FALSE). This can speed up
the garbage collector and reduce system calls on some
platforms.
STANDARD PACKAGES
o New package 'mle'. This is a simple package to find maximum
likelihood estimates, and perform likelihood profiling and
approximate confidence limits based upon it. A well-behaved
likelihood function is assumed, and it is the responsibility
of the user to gauge the applicability of the asymptotic
theory. This package is based on S4 methods and classes.
o Changes in package 'mva':
- factanal() now returns the test statistic and P-value formerly
computed in the print method.
- heatmap() has many more arguments, partly thanks to Wolfgang
Huber and Andy Liaw.
- Arguments `unit' and `hmin' of plclust() are now implemented.
- prcomp() now accepts complex matrices, and there is biplot()
method for its output (in the real case).
- dendrograms are slightly better documented, methods working with
"label", not "text" attribute. New rev() method for dendrograms.
- plot.dendrogram() has an explicit `frame.plot' argument
defaulting to FALSE (instead of an implicit one defaulting to TRUE).
o Changes in package 'tcltk':
- The package is now in a namespace. To remove it you will
now need to use unloadNamespace("tcltk").
- The interface to Tcl has been made much more efficient by
evaluating Tcl commands via a vector of Tcl objects rather
than by constructing the string representation.
- An interface to Tcl arrays has been introduced.
- as.tclObj() has gained a `drop' argument to resolve an
ambiguity for vectors of length one.
o Changes in package 'tools':
- Utilities for testing and listing files, manipulating file
paths, and delimited pattern matching are now exported.
- Functions checkAssignFuns(), checkDocArgs() and checkMethods()
have been renamed to checkReplaceFuns(), checkDocFiles(), and
checkS3methods, to given better descriptions of what they do.
- R itself is now used for analyzing the markup in the \usage
sections. Hence in particular, replacement functions or S3
replacement methods are no longer ignored.
- checkDocFiles() now also determines 'over-documented' arguments
which are given in the \arguments section but not in \usage.
- checkDocStyle() and checkS3Methods() now know about internal S3
generics and S3 group generics.
- S4 classes and methods are included in the QC tests.
Warnings will be issued from undoc() for classes and
methods defined but not documented. Default methods
automatically generated from nongeneric functions do not
need to be documented.
- New (experimental) functions codocClasses() and codocData()
for code/documentation consistency checking for S4 classes and
data sets.
o Changes in package 'ts':
- arima.sim() now checks for inconsistent order specification
(as requested in PR#3495: it was previously documented not to).
- decompose() has a new argument `filter'.
- HoltWinters() has new arguments `optim.start' and
`optim.control', and returns more components in the fitted
values. The plot method allows `ylim' to be set.
- plot.ts() has a new argument `nc' controlling the number of
columns (with default the old behaviour for plot.mts).
- StructTS() now allows the first value of the series to be
missing (although it is better to omit leading NAs). (PR#3990)
USING PACKAGES
o library() has a pos argument, controlling where the package is
attached (defaulting to pos=2 as before).
o require() now maintains a list of required packages in the
toplevel environment (typically, .GlobalEnv). Two features
use this: detach() now warns if a package is detached that is
required by an attached package, and packages that install
with saved images no longer need to use require() in the
.First as well as in the main source.
o Packages with name spaces can now be installed using --save.
o Packages that use S4 classes and methods should now work with
or without saved images (saved images are still recommended
for efficiency), writing setMethod(), etc. calls with the
default for argument `where'. The topenv() function and
sys.source() have been changed correspondingly. See the
online help.
o Users can specify in the DESCRIPTION file the collation order
for files in the R source directory of a package.
DOCUMENTATION CHANGES
o Changes in R documentation format:
- New logical markup commands for emphasizing (\strong) and
quoting (\sQuote and \dQuote) text, for indicating the usage
of an S4 method (\S4method), and for indicating specific kinds
of text (\acronym, \cite, \command, \dfn, \env, \kbd, \option,
\pkg, \samp, \var).
- New markup \preformatted for pre-formatted blocks of text
(like \example but within another section). (Based on a
contribution by Greg Warnes.)
- New markup \concept for concept index entries for use by
help.search().
o Rdconv now produces more informative output from the special
\method{GENERIC}{CLASS} markup for indicating the usage of S3
methods, providing the CLASS info in a comment.
o \dontrun sections are now marked within comments in the
user-readable versions of the converted help pages.
o \dontshow is now the preferred name for \testonly.
INSTALLATION CHANGES
o The zlib code in the sources is used unless the external
version found is at least version 1.1.4 (up from 1.1.3).
o The regression checks now have to be passed exactly, except
those depending on recommended packages (which cannot be
assumed to be present).
o The target make check-all now runs R CMD check on all the
recommended packages (and not just runs their examples).
o There are new macros DYLIB_* for building dynamic libraries,
and these are used for the dynamic Rmath library (which was
previously built as a shared object).
o If a system function log1p is found, it is tested for accuracy
and if inadequate the substitute function in src/nmath is
used, with name remapped to Rlog1p. (Apparently needed on
OpenBSD/NetBSD.)
C-LEVEL FACILITIES
o There is a new installed header file R_ext/Parse.h which
allows R_ParseVector to be called by those writing extensions.
(Note that the interface is changed from that used in the
unexported header Parse.h in earlier versions, and is not
guaranteed to remain unchanged.)
o The header R_ext/Mathlib.h has been removed. It was replaced by
Rmath.h in R 1.2.0.
o PREXPR has been replaced by two macros, PREXPR for obtaining the
expression and PRCODE for obtaining the code for use in eval.
The macro BODY_EXPR has been added for use with closures.
For a closure with a byte compiled body, the macro BODY_EXPR
returns the expression that was compiled; if the body is not
compiled then the body is returned. This is to support byte
compilation.
o Internal support for executing byte compiled code has been added.
A compiler for producing byte compiled code will be made available
separately and should become part of a future R release.
o On Unix-like systems calls to the popen() and system() C library
functions now go through R_popen and R_system. On Mac OS X these
suspend SIGALRM interrupts around the library call. (Related to
PR#1140.)
UTILITIES
o R CMD check accepts "ORPHANED" as package maintainer. Package
maintainers can now officially orphan a package, i.e., resign
from maintaining a package.
o R CMD INSTALL (Unix only) is now 'safe': if the attempt to
install a package fails, leftovers are removed. If the package
was already installed, the old version is restored.
o R CMD build excludes possible (obsolete) data and vignette
indices in DCF format (and hence also no longer rebuilds them).
o R CMD check now tests whether file names are valid across file
systems and supported operating system platforms. There is some
support for code/documentation consistency checking for data
sets and S4 classes. Replacement functions and S3 methods in
\usage sections are no longer ignored.
o R CMD Rdindex has been removed.
DEPRECATED & DEFUNCT
o The assignment operator `_' has been removed.
o printNoClass() is defunct.
o The classic Mac OS port is no longer supported, and its files
have been removed from the sources.
o The deprecated argument 'white' of parse() has been removed.
o Methods pacf/plot.mts() have been removed and their functionality
incorporated into pacf.default/plot.ts().
o print.coefmat() is deprecated in favour of printCoefmat()
(which is identical apart from the default for na.print which
is changed from "" to "NA", and better handling of the 0-rank
case where all coefficients are missing).
o codes() and codes<-() are deprecated, as almost all uses
misunderstood what they actually do.
o The use of multi-argument return() calls is deprecated: use a
(named) list instead.
o anovalist.lm (replaced in 1.2.0) is now deprecated.
o - and Ops methods for POSIX[cl]t objects are removed: the
POSIXt methods have been used since 1.3.0.
o glm.fit.null(), lm.fit.null() and lm.wfit.null() are deprecated.
o Classes "lm.null" and "glm.null" are deprecated and all of their
methods have been removed.
o Method weights.lm(), a copy of weights.default(), has been removed.
o print.atomic() is now deprecated.
o The back-compatibility entry point Rf_log1p in standalone
Rmath has been removed.
BUG FIXES
o ARMAacf() sometimes gave too many results or failed if `lag.max'
was used.
o termplot() with a subset of terms now gives correct partial residuals
o Functions anova.glm(), contrasts(), getS3method(), glm() and
make.tables() were applying get() without asking for a
function and/or not starting the search in the environment of
the caller.
o as.data.frame.matrix() ignored the `row.names' argument.
o as.data.frame.list(optional = TRUE) was converting names, and
hence data.frame(list(...), check.names = FALSE) was. (PR#3280)
o as.dist(m) {mva} now obeys `diag=TRUE' or `upper=TRUE' in all cases.
o as.double(list()) etc was regarded as an error, because of a
bug in isVectorizable.
o On some platforms the wday component of the result of
as.POSIXlt() was corrupted when trying to guess the DST offset
at dates the OS was unable to handle.
o ave(x, g) didn't work when `g' had unused levels.
o biplot.default() allows xlim and ylim to be set. (PR#3168)
o bgroup with a null (.) delimiter was setting font to Greek. (PR#3099)
o body() and formals() were looking for named functions in
different places: they now both look starting at the
environment in which they are called. Several documentation
errors for these functions have been corrected.
o boxplot() was ignoring cex.axis. (PR#2628)
o cut.POSIXt() now passes on ... to cut.default(), as documented.
o crossprod() now works for 1d arrays with unnamed dimnames (PR#4092).
o data() sometimes failed with multiple files, as the paths
variable got corrupted.
o data.frame() failed with a nonsensical error message if it
grabbed row names from an argument that was subsequently
recycled. Now they are discarded, with a warning.
o data.matrix() was documented to replace factors by their
codes, but in fact re-coded into the alphabetical ordering of
the levels.
o decompose() with even frequency used an asymmetric moving
average window.
o demo() was using `topic' as a regexp rather than an exact match.
o dotchart() now does recycle the `color' argument and better
documents the `bg' one (PR#4343).
o getAnywhere() didn't not correctly check for S3 methods, when
the generic or the class name contains a "." (PR#4275).
o file.copy() ignored the overwrite argument. (PR#3529)
o filter(method="recursive") was unnecessarily requiring the
time series to be longer than the filter.
o format(*, nsmall = m) with m > 0 now returns exponential format
less often.
o get() and exists() were ignoring the `mode' argument for
variables in base. The error message for get() now mentions
the mode requested if not "any". A bug in setting the NAMED
field in do_get was fixed.
o getS3method(f, cl, optional=TRUE) now returns NULL if `f' does
not exist.
o HoltWinters() would segfault if only gamma was optimized, and
not converge if gamma=0 and seasonal="mult".
o hyperref.cfg now contains definitions for colors it uses.
o identify.default() detects zero-length arguments. (PR#4057)
o legend() allows shading without filling again.
o legend(x, y, leg) doesn't triple `leg' anymore when it is a call.
o Corrected many problems with 0-rank (but not necessarily empty
model) lm() and glm() fits.
o lm.influence() now handles 0-rank models, and names its output
appropriately. It also ensures that hat values are not greater
than one, and rounds values within rounding error of one.
o The `method' argument to loess() did not work. (PR#3332)
o lsfit() was returning incorrect residuals for 0-rank fits.
o methods("$") and methods("$<-") were failing to find methods.
o methods() and getS3method() find methods if the generic
dispatches on a name other than its own. (The cases of
coefficients() and fitted.values() were fixed in 1.7.1.)
o model.matrix.default() was throwing an error on 0-term models,
but now handles them correctly.
o Printing `nls' objects misbehaved when `data' was a composite
expression.
o .NotYetImplemented() gave "Error in .NotYet...(): .."
o numericDeriv() was failing if the first argument was a name
rather than a call. (PR#3746)
o pacf() was failing if called on a one-column matrix.
o paste() applied to 0-length vectors gave "" not a 0-length vector.
o The length of a string specification of par(lty=) is now checked: it
should be 2, 4, 6 or 8.
o Using lty=as.integer(NA) and as.double(NA) were being accepted
but giving nonsensical results. Those are not documented
valid values for lty. (PR#3217)
o Erroneously calling par(new=TRUE) with no plot was not caught
and so could result in invalid graphics files. (PR#4037)
o par(tck=) was being interpreted incorrectly. It is now
documented in the same way as S, and now behaves as
documented. (PR#3504)
o plclust() [and hence plot.hclust()] sometimes now uses correct `ylim's
also in unusual cases. (PR#4197)
o plot.POSIX[cl]t no longer passes col, lty, lwd to axis.POSIXt.
o The png(), jpeg(), png() and win.metafile() devices now
enforce the length limit on the filename. (PR#3466)
o pnorm(x, 1, 0) does not give NaN anymore;
also, pnorm(x, m, s=Inf) == lim{s -> Inf} pnorm(x,m,s).
Similar changes for dnorm(), cf PR#1218.
o On some machines the internal rounding used in postscript() was
imperfect, causing unnecessarily verbose output (-0.00 instead of
0) and problems with make check.
o qqnorm()'s result now keeps NAs from its input. (PR#3750)
o rank() sometimes preserved and sometimes dropped names.
o readBin(what = "foo") didn't convert `what' to its type. (PR#4043)
o reorder.dendrogram() now properly resets the "midpoint" attributes
such that reorder()ed dendrograms now plot properly.
o rmultinom(1,100, c(3, 4, 2, 0,0))[3] was NA. (PR#4431)
o sapply() for matrix result does not return list(NULL,NULL) dimnames
anymore.
o scan() now interprets quoting in fields to be skipped. (PR#4128)
o seq.POSIXt(from, to, by="DSTday") was failing or calculating
the length incorrectly.
o sort() and unique.default() were failing on 0-level factors.
o step() adds a fuzz for reduction in AIC for 0-df terms. (PR#3491)
o str(x) gives better output when x is of mode "(". Its "dendrogram"
method obeys the `give.attr' argument which now defaults to FALSE.
o strwidth(f) and strheight(f) could seg.fault when `f' was a
function. The fix [to C-level coerceVector()] now gives an error
instead of passing through. This may catch other potential
problems.
o Sweave() reports the chunk number rather than the driver call when
a try error gets caught.
o trunc.POSIXt(x) for 0-length x does not return invalid structures
anymore. (PR#3763).
o warnings() now returns NULL instead of an error when no warnings
have occured yet. (PR#4389)
o Using write.table() setting the `dec' argument and with no
numeric columns failed. (PR#3532)
o $<- did not duplicate when it needed to.
o Recursive indexing of lists had too little error-checking.
(related to PR#3324)
o Removed warning about names in persistent strings when a
namespace is saved.
o Fixed some malformed error messages in the methods package.
o pipes were not opening properly when profiling on a Mac OS.
(PR#1140)
o Lapack error messages (PR#3494) and call to DGEQP3 (PR#2867) are
corrected.
o Rd conversion was limiting a file to 1000 pairs of braces,
without any warning. Now the limit is 10000, with a warning.
(PR#3400)
o In the tcltk package, the tkimage.*() commands were defined
nonsensically as widget commands. They have been redefined to be
more useful now.
o Registered group generics were not being used. (PR#3536)
o Subsetting data frames did not always correctly detect that
non-existent columns were specified.
o There are many more checks for over-running internal buffers,
almost always reporting errors.
o Added some buffer overflow checking in gram.y.
o Internals for complex assignment did not check that function name
was a symbol, which could cause a segfault.
o Fixed bug in S4 methods dispatch that made local variables in the
generic visible when executing the body of a method, thus violating
lexical scope.
**************************************************
* *
* 1.7 SERIES NEWS *
* *
**************************************************
CHANGES IN R VERSION 1.7.1
NEW FEATURES
o The help pages give appropriate references to the Blue,
White or Green books for functions based on the descriptions
of S functions given there. (E&OE)
o Function getAnywhere() can find non-exported objects, for
namespaces or registered methods.
DEPRECATED & DEFUNCT
o The (unimplemented) argument 'white' of parse() is deprecated.
o The tkfilefind demo in the tcltk library is deprecated, since
it never worked well, and apparently not at all with Tcl/Tk 8.4.
BUG FIXES
o print.table() used too much white space in some cases in 1.7.0.
o selectMethod() failed if `f' was a non-generic and
optional=TRUE, and gave a confusing error message if
optional=FALSE.
o pchisq(*, ncp) and qchisq(*, ncp) work in more cases for large ncp
or quantile and give warning or error messages otherwise.
o str(x) now also works when x is an "externalptr" (or "weakref").
o rbeta(), rf(), and rt() now support infinite parameter values;
other distributions return NaN instead of NA for such.
o Redefining a class is now safer if the new definition
generates an error (previously some invalid metadata could be
left behind).
o A number of errors are now caught in setClass() that
previously either went unchecked or waited until new() to
appear:
- classes may not contain themselves, directly or indirectly;
- classes appearing either as slots or as superclasses must
themselves be defined;
- slot names (direct or inherited) must be unique.
In related changes, prototype() now works as documented, and is the
recommended way to provide prototype objects.
o Sorting an ordered factor would return an unordered one.
This caused some trouble with panel.superpose (PR#974).
o methods() could return duplicates if a method in a namespace
was both exported and registered.
o The internal zip.unpack() could crash if more than 500 files
were to be extracted. (PR#2818)
o The "r+" and "r+b" modes of opening file connections disallowed
writing.
o library() now warns the user if the chosen package name
doesn't match the internal package name, and corrects the
error. (PR#2816)
o qr(LAPACK=TRUE) (and qr for complex arguments) might have failed
to pivot for rank-deficient inputs. (PR#2867)
o Only re-mapped symbols are exported by regex.o, to avoid
problems with embedded R on RedHat 9.
o arima() did not set transform.pars to FALSE if AR parameters
were fixed, although it claimed to.
o pnorm() was slower than necessary in the outer tails in some
cases due to a typo in the improvements from PR#699. (PR#2883)
o setGeneric() and setMethod() now catch some examples where the
generic and the method have different argument lists; the
evaluator checks for internal consistency of these argument lists.
o expand.grid(x) {the rare case of one argument} now treats factor
levels as in the typical case of two or more arguments.
o Some implicit coercions to lists could cause segfaults, e.g.
x <- matrix(nrow=20000, ncol=20); x$any <- numeric(0)
due to a PROTECT bug. (PR#2923)
o The replacement functions for colnames() and rownames() did not
work for arrays with more than two dimensions. They could
create dimnames of the form list(NULL, NULL) rather than
remove the dimnames attribute.
o termplot() gave incorrect answers with rug=TRUE or
partial=TRUE for factors whose levels were not in
lexicographical order.
o A serious performance flaw in as() computations was fixed (the
methods were not being cached properly.)
o model.frame(~1, data) always returned 1 row. (PR#2958)
o The data editor was truncating objects to 65535 rows. Pro
tem, editing objects with more than 65535 rows is an error,
and objects cannot be extended beyond that row. This restriction
will be removed in 1.8.0. (PR#2962)
o A bug could produce apparent loops in formal method selection
when inheritance was restricted (used for the as() function).
A related problem sometimes broke attaching a package that had
methods for basic functions, such as names(), used in method
selection.
o Empty expressions as in return(x,) could generate subsequent
segfaults: they are now errors. (PR#2880)
o The Kinderman-Ramage Normal Random Generator had several
problems leading to not-quite normally distributed variates
(PR#2846). One problem was traced to an error in the original
1976 JASA paper! Thanks to Josef Leydold and his team for
investigating this. The old generator has been retained for
reproducibility of older results, under the name
"Buggy Kinderman-Ramage". A warning is issued if you select it
(also indirectly via RNGversion()).
o promptMethods() now puts the \alias lines for methods in the
normal place, near the top of the file, and quotes class
names in signatures.
o getS3method() and methods() were not finding methods for
coefficients() and fitted.values() (which dispatch on "coef"
and "fitted" respectively).
o scan() (and hence read.table) was not finding matches for
separator chars with the upper bit set. (PR#3035)
o lm.(w)fit failed if the fit had rank 0.
o lqs() did not report explicitly that it had failed if all
samples gave singular fits.
o predict.lm(*, se=TRUE) {w/ weights, w/o newdata} now gives correct
SE's. (PR#3043)
o cor.test(x, y, method="spearman") now also works for
length(x) > 1290.
o Matrices were printed mis-aligned if right=TRUE and na.print
was specified. (PR#3058)
o R CMD check gives now a clearer message when latex produces
errors on the package manual. (PR#3070)
o isSeekable() was incorrectly returning FALSE on all file connections.
o tkpager() wasn't quite using its title and header arguments in
the way prescribed by file.show()
o legend(*, pch=p, lty=l) now works better when `p' or `l' have
NAs.
o All braces in regular expressions used by Sweave() are now
escaped by a backslash.
o unloadNamespace() failed because getNamespaceImports() now coerces a
string argument to a name space.
o deriv3 gave incorrect Hessians for some very simple
expressions such as expression(x*y) (since the comments in the
C code were incorrect). (PR#2577)
o power.t.test(..., delta=NULL,alternative='two.sided') failed. (PR#2993)
o Lines on postscript() plots with thousands of segments might
have been plotted inaccurately in 1.7.0. (PR#3132)
Solid lines in postscript() output are split into groups of 1000
segments to help some PostScript interpreters (typically old
level-1 interpreters).
o cut.POSIXt failed when the breaks were date/time objects. (PR#3181)
o Usage of methods in dist.Rd is now correctly documented
(as.matrix.dist() is not an exported symbol).
o The predict() method for ar fits was not retrieving the series
from the parent environment.
o eigen() and La.eigen() were not returning a matrix of
eigenvectors for a 1x1 input.
o hsv() and rgb() now return character(0) when one of their args has
length 0. This also fixes terrain.color(1). (PR#3233)
o [[<-.data.frame checked if a replacment was too short, but not
if it was too long. (related to PR#3229)
o qt(x, df) was quite inaccurate for df=1+epsilon; it is now much more
accurate for df in (1,2) and more precise for other df. (PR#2991)
o qbeta() now has slightly improved C code in two places, as suggested
in the 2nd followup to PR#2894.
CHANGES IN R VERSION 1.7.0
USER-VISIBLE CHANGES
o solve(), chol(), eigen() and svd() now use LAPACK routines
unless a new back-compatibility option is turned on. The
signs and normalization of eigen/singular vectors may change
from earlier versions.
o The `methods', `modreg', `mva', `nls' and `ts' packages
are now attached by default at startup (in addition to `ctest').
The option "defaultPackages" has been added which contains the
initial list of packages. See ?Startup and ?options for details.
Note that .First() is no longer used by R itself.
class() now always (not just when `methods' is attached) gives
a non-null class, and UseMethod() always dispatches on the
class that class() returns. This means that methods like
foo.matrix and foo.integer will be used. Functions oldClass()
and oldClass<-() get and set the "class" attribute as R
without `methods' used to.
o The default random number generators have been changed to
`Mersenne-Twister' and `Inversion'. A new RNGversion()
function allows you to restore the generators of an earlier R
version if reproducibility is required.
o Namespaces can now be defined for packages other than `base':
see `Writing R Extensions'. This hides some internal objects
and changes the search path from objects in a namespace. All
the base packages (except methods and tcltk) have namespaces,
as well as the recommended packages `KernSmooth', `MASS',
`boot', `class', `nnet', `rpart' and `spatial'.
o Formulae are not longer automatically simplified when terms()
is called, so the formulae in results may still be in the
original form rather than the equivalent simplified form
(which may have reordered the terms): the results are now
much closer to those of S.
o The tables for plotmath, Hershey and Japanese have been moved
from the help pages (example(plotmath) etc) to demo(plotmath) etc.
o Errors and warnings are sent to stderr not stdout on
command-line versions of R (Unix and Windows).
o The R_X11 module is no longer loaded until it is needed, so
do test that x11() works in a new Unix-alike R installation.
NEW FEATURES
o if() and while() give a warning if called with a vector condition.
o Installed packages under Unix without compiled code are no
longer stamped with the platform and can be copied to other
Unix-alike platforms (but not to other OSes because of
potential problems with line endings and OS-specific help files).
o The internal random number generators will now never return
values of 0 or 1 for runif. This might affect simulation
output in extremely rare cases. Note that this is not
guaranteed for user-supplied random-number generators, nor
when the standalone Rmath library is used.
o When assigning names to a vector, a value that is too short is
padded by character NAs. (Wishlist part of PR#2358)
o It is now recommended to use the 'SystemRequirements:' field in
the DESCRIPTION file for specifying dependencies external to the
R system.
o Output text connections no longer have a line-length limit.
o On platforms where vsnprintf does not return the needed buffer
size the output line-length limit for fifo(), gzfile() and
bzfile() has been raised from 10k to 100k chars.
o The Math group generic does not check the number of arguments
supplied before dispatch: it used to if the default method had
one argument but not if it had two. This allows trunc.POSIXt()
to be called via the group generic trunc().
o Logical matrix replacement indexing of data frames is now
implemented (interpreted as if the lhs was a matrix).
o Recursive indexing of lists is allowed, so x[[c(4,2)]] is
shorthand for x[[4]][[2]] etc. (Wishlist PR#1588)
o Most of the time series functions now check explicitly for a
numeric time series, rather than fail at a later stage.
o The postscript output makes use of relative moves, and so is
somewhat more compact.
o %*% and crossprod() for complex arguments make use of BLAS
routines and so may be much faster on some platforms.
o arima() has coef(), logLik() (and hence AIC) and vcov() methods.
o New function as.difftime() for time-interval data.
o basename() and dirname() are now vectorized.
o biplot.default() {mva} allows `xlab' and `ylab' parameters to
be set (without partially matching to `xlabs' and `ylabs').
(Thanks to Uwe Ligges.)
o New function capture.output() to send printed output from an expression
to a connection or a text string.
o ccf() (pckage ts) now coerces its x and y arguments to class "ts".
o chol() and chol2inv() now use LAPACK routines by default.
o as.dist(.) is now idempotent, i.e., works for "dist" objects.
o Generic function confint() and `lm' method (formerly in
package MASS, which has `glm' and `nls' methods).
o New function constrOptim() for optimisation under linear inequality
constraints.
o Add `difftime' subscript method and methods for the group
generics. (Thereby fixing PR#2345)
o download.file() can now use HTTP proxies which require `basic'
username/password authentication.
o dump() has a new argument `envir'. The search for named
objects now starts by default in the environment from which
dump() is called.
o The edit.matrix() and edit.data.frame() editors can now handle
logical data.
o New argument `local' for example() (suggested by Andy Liaw).
o New function file.symlink() to create symbolic file links
where supported by the OS.
o New generic function flush() with a method to flush connections.
o New function force() to force evaluation of a formal argument.
o New functions getFromNamespace(), fixInNamespace() and
getS3method() to facilitate developing code in packages with
namespaces.
o glm() now accepts `etastart' and `mustart' as alternative ways
to express starting values.
o New function gzcon() which wraps a connection and provides
(de)compression compatible with gzip.
load() now uses gzcon(), so can read compressed saves from
suitable connections.
o help.search() can now reliably match individual aliases and
keywords, provided that all packages searched were installed
using R 1.7.0 or newer.
o hist.default() now returns the nominal break points, not those
adjusted for numerical tolerances.
To guard against unthinking use, `include.lowest' in
hist.default() is now ignored, with a warning, unless `breaks'
is a vector. (It either generated an error or had no effect,
depending how prettification of the range operated.)
o New generic functions influence(), hatvalues() and dfbeta()
with lm and glm methods; the previously normal functions rstudent(),
rstandard(), cooks.distance() and dfbetas() became generic.
These have changed behavior for glm objects -- all originating from
John Fox' car package.
o interaction.plot() has several new arguments, and the legend
is not clipped anymore by default. It internally uses axis(1,*)
instead of mtext().
This also addresses "bugs" PR#820, PR#1305, PR#1899.
o New isoreg() function and class for isotonic regression
(`modreg' package).
o La.chol() and La.chol2inv() now give interpretable error
messages rather than LAPACK error codes.
o legend() has a new `plot' argument. Setting it `FALSE' gives
size information without plotting (suggested by U.Ligges).
o library() was changed so that when the methods package is
attached it no longer complains about formal generic functions
not specific to the library.
o list.files()/dir() have a new argument `recursive'.
o lm.influence() has a new `do.coef' argument allowing *not* to
compute casewise changed coefficients. This makes plot.lm() much
quicker for large data sets.
o load() now returns invisibly a character vector of the names
of the objects which were restored.
o New convenience function loadURL() to allow loading data files
from URLs (requested by Frank Harrell).
o New function mapply(), a multivariate lapply().
o New function md5sum() in package tools to calculate MD5
checksums on files (e.g. on parts of the R installation).
o medpolish() {package eda} now has an `na.rm' argument (PR#2298).
o methods() now looks for registered methods in namespaces, and
knows about many objects that look like methods but are not.
o mosaicplot() has a new default for `main', and supports the
`las' argument (contributed by Uwe Ligges and Wolfram Fischer).
o An attempt to open() an already open connection will be detected
and ignored with a warning. This avoids improperly closing
some types of connections if they are opened repeatedly.
o optim(method = "SANN") can now cover combinatorial optimization
by supplying a move function as the `gr' argument (contributed
by Adrian Trapletti).
o PDF files produced by pdf() have more extensive information
fields, including the version of R that produced them.
o On Unix(-alike) systems the default PDF viewer is now determined
during configuration, and available as the 'pdfviewer' option.
o pie(...) has always accepted graphical pars but only passed
them on to title(). Now pie(, cex=1.5) works.
o plot.dendrogram (`mva' package) now draws leaf labels if present
by default.
o New plot.design() function as in S.
o The postscript() and PDF() drivers now allow the title to be set.
o New function power.anova.test(), contributed by Claus Ekstrom.
o power.t.test() now behaves correctly for negative delta in the
two-tailed case.
o power.t.test() and power.prop.test() now have a `strict'
argument that includes rejections in the "wrong tail" in the
power calculation. (Based in part on code suggested by Ulrich
Halekoh.)
o prcomp() is now fast for n x m inputs with m >> n.
o princomp() no longer allows the use of more variables than
units: use prcomp() instead.
o princomp.formula() now has principal argument `formula', so
update() can be used.
o Printing an object with attributes now dispatches on the
class(es) of the attributes. See ?print.default for the fine
print. (PR#2506)
o print.matrix() and prmatrix() are now separate functions.
prmatrix() is the old S-compatible function, and
print.matrix() is a proper print method, currently identical
to print.default(). prmatrix() and the old print.matrix()
did not print attributes of a matrix, but the new print.matrix()
does.
o print.summary.{lm,glm} now default to symbolic.cor = FALSE, but
symbolic.cor can be passed to the print methods from the
summary methods. print.summary.{lm,glm} print correlations to
2 decimal places, and the symbolic printout avoids abbreviating
labels.
o If a prompt() method is called with 'filename' as 'NA', a
list-style representation of the documentation shell generated
is returned. New function promptData() for documenting objects
as data sets.
o qqnorm() and qqline() have an optional logical argument
`datax' to transpose the plot (S-PLUS compatibility).
o qr() now has the option to use LAPACK routines, and the
results can be used by the helper routines qr.coef(), qr.qy()
and qr.qty(). The LAPACK-using versions may be much faster
for large matrices (using an optimized BLAS) but are less
flexible.
o QR objects now have class "qr", and solve.qr() is now just the
method for solve() for the class.
o New function r2dtable() for generating random samples of two-way
tables with given marginals using Patefield's algorithm.
o rchisq() now has a non-centrality parameter `ncp', and there's a
C API for rnchisq().
o New generic function reorder() with a dendrogram method;
new order.dendrogram() and heatmap().
o require() has a new argument, character.only,
-- to make it align with library.
o New functions rmultinom() and dmultinom(), the first one with
a C API.
o New function runmed() for fast runnning medians (`modreg' package).
o New function slice.index() for identifying indexes with respect
to slices of an array.
o solve.default(a) now gives the dimnames one would expect.
o stepfun() has a new `right' argument for right-continuous step
function construction.
o str() now shows ordered factors different from unordered ones.
It also differentiates "NA" and as.character(NA), also for factor
levels.
o symnum() has a new logical argument `abbr.colnames'.
o summary(<logical>) now mentions NA's as suggested by
Goran Brostrom.
o summaryRprof() now prints times with a precision appropriate
to the sampling interval, rather than always to 2dp.
o New function Sys.getpid() to get the process ID of the R session.
o table() now allows exclude= with factor arguments (requested by
Michael Friendly).
o The tempfile() function now takes an optional second argument
giving the directory name.
o The ordering of terms for terms.formula(keep.order=FALSE) is
now defined on the help page and used consistently, so that
repeated calls will not alter the ordering (which is why
delete.response() was failing: see the bug fixes). The
formula is not simplified unless the new argument `simplify'
is true.
o added "[" method for terms objects.
o New argument `silent' to try().
o ts() now allows arbitrary values for y in start/end = c(x, y):
it always allowed y < 1 but objected to y > frequency.
o unique.default() now works for POSIXct objects, and hence so
does factor().
o Package tcltk now allows return values from the R side to the
Tcl side in callbacks and the R_eval command. If the return
value from the R function or expression is of class "tclObj"
then it will be returned to Tcl.
o A new HIGHLY EXPERIMENTAL graphical user interface using the tcltk
package is provided. Currently, little more than a proof of concept.
It can be started by calling "R -g Tk" (this may change in later
versions) or by evaluating tkStartGUI(). Only Unix-like systems
for now. It is not too stable at this point; in particular, signal
handling is not working properly.
o Changes to support name spaces:
- Placing base in a name space can no longer be disabled by
defining the environment variable R_NO_BASE_NAMESPACE.
- New function topenv() to determine the nearest top level
environment (usually .GlobalEnv or a name space environment).
- Added name space support for packages that do not use methods.
o Formal classes and methods can be `sealed', by using the
corresponding argument to setClass or setMethod. New
functions isSealedClass() and isSealedMethod() test sealing.
o packages can now be loaded with version numbers. This allows
for multiple versions of files to be installed (and potentially
loaded). Some serious testing will be going on, but it should
have no effect unless specifically asked for.
INSTALLATION CHANGES
o TITLE files in packages are no longer used, the Title field
in the DESCRIPTION file being preferred. TITLE files will be
ignored in both installed packages and source packages.
o When searching for a Fortran 77 compiler, configure by default
now also looks for Fujitsu's frt and Compaq's fort, but no
longer for cf77 and cft77.
o Configure checks that mixed C/Fortran code can be run before
checking compatibility on ints and doubles: the latter test
was sometimes failing because the Fortran libraries were not
found.
o PCRE and bzip2 are built from versions in the R sources if the
appropriate library is not found.
o New configure option --with-lapack to allow high-performance
LAPACK libraries to be used: a generic LAPACK library will be
used if found. This option is not the default.
o New configure options --with-libpng, --with-jpeglib, --with-zlib,
--with-bzlib and --with-pcre, principally to allow these
libraries to be avoided if they are unsuitable.
o If the precious variable R_BROWSER is set at configure time
it overrides the automatic selection of the default browser.
It should be set to the full path unless the browser appears
at different locations on different client machines.
o Perl requirements are down again to 5.004 or newer.
o Autoconf 2.57 or later is required to build the configure
script.
o Configure provides a more comprehensive summary of its results.
o Index generation now happens when installing source packages
using R code in package tools. An existing 'INDEX' file is used
as is; otherwise, it is automatically generated from the \name
and \title entries in the Rd files. Data, demo and vignette
indices are computed from all available files of the respective
kind, and the corresponding index information (in the Rd files,
the 'demo/00Index' file, and the \VignetteIndexEntry{} entries,
respectively). These index files, as well as the package Rd
contents data base, are serialized as R objects in the 'Meta'
subdirectory of the top-level package directory, allowing for
faster and more reliable index-based computations (e.g., in
help.search()). For vignettes an HTML index is generated
and linked into the HTML help system.
o The Rd contents data base is now computed when installing source
packages using R code in package tools. The information is
represented as a data frame without collapsing the aliases and
keywords, and serialized as an R object. (The 'CONTENTS' file
in Debian Control Format is still written, as it is used by the
HTML search engine.)
o A NAMESPACE file in root directory of a source package is copied
to the root of the package installation directory. Attempting to
install a package with a NAMESPACE file using --save signals an
error; this is a temporary measure.
o The defaults for configure for Darwin systems is
--with-blas='-framework vecLib' --with-lapack --with-aqua
that by default builds R as a framework and installs it in
/Library/Frameworks as R.framework. Then, make install just
installs the R.framework in /Library/Frameworks unless specified
at configure time using the -enable-R-framework=[DIR] or using
the --prefix flag at installation time.
DEPRECATED & DEFUNCT
o The assignment operator `_' will be removed in the next
release and users are now warned on every usage: you may even see
multiple warnings for each usage.
If environment variable R_NO_UNDERLINE is set to anything of
positive length then use of `_' becomes a syntax error.
o machine(), Machine() and Platform() are defunct.
o restart() is defunct. Use try(), as has long been recommended.
o The deprecated arguments `pkg' and `lib' of system.file() have
been removed.
o printNoClass() {methods} is deprecated (and moved to base,
since it was a copy of a base function).
o Primitives dataClass() and objWithClass() have been replaced
by class() and class<-(); they were internal support functions
for use by package methods.
o The use of SIGUSR2 to quit a running R process under Unix is
deprecated, the signal may need to be reclaimed for other
purposes.
UTILITIES
o R CMD check more compactly displays the tests of DESCRIPTION
meta-information. It now reports demos and vignettes without
available index information. Unless installation tests are
skipped, checking is aborted if the package dependencies cannot
be resolved at run time. Rd files are now also explicitly
checked for empty \name and \title entries. The examples are
always run with T and F redefined to give an error if used
instead of TRUE and FALSE.
o The Perl code to build help now removes an existing example
file if there are no examples in the current help file.
o R CMD Rdindex is now deprecated in favor of function Rdindex()
in package tools.
o Sweave() now encloses the Sinput and Soutput environments of
each chunk in an Schunk environment. This allows to fix some
vertical spacing problems when using the latex class slides.
C-LEVEL FACILITIES
o A full double-precision LAPACK shared library is made
available as -lRlapack. To use this include
$(LAPACK_LIBS) $(BLAS_LIBS) in PKG_LIBS.
o Header file R_ext/Lapack.h added. C declarations of BLAS
routines moved to R_ext/BLAS.h and included in R_ext/Applic.h
and R_ext/Linpack.h for backward compatibility.
o R will automatically call initialization and unload routines, if
present, in shared libraries/DLLs during dyn.load() and
dyn.unload() calls. The routines are named R_init_<dll name>
and R_unload_<dll name>, respectively. See the Writing R
Extensions Manual for more information.
o Routines exported directly from the R executable for use with
.C(), .Call(), .Fortran() and .External() are now accessed via
the registration mechanism (optionally) used by packages. The
ROUTINES file (in src/appl/) and associated scripts to
generate FFTab.h and FFDecl.h are no longer used.
o Entry point Rf_append is no longer in the installed headers
(but is still available). It is apparently unused.
o Many conflicts between other headers and R's can be avoided by
defining STRICT_R_HEADERS and/or R_NO_REMAP -- see `Writing R
Extensions' for details.
o New entry point R_GetX11Image and formerly undocumented
ptr_R_GetX11Image are in new header R_ext/GetX11Image. These
are used by package tkrplot.
BUG FIXES
o The redefinition of the internal do_dataentry by both the aqua and X11
modules, casued a bus error when launching R without the --gui=aqua option
under X11 using a version of R built to use the aqua module. This has
now been fixed. (PR#6438)
o Sys.sleep() on Unix was having trouble with waits of less than 0.5s
o The fix to PR#2396 broke read.table() on files with CR line
endings. (PR#2469) Separate problem with this on Carbon Mac OS
build fixed as well.
o Converting Sweave files to noweb syntax using SweaveSyntConv()
was broken.
o Printing numbers near the minimum could get the number of
significant figures wrong due to underflow: for example 4e-308
might print as 4.00000e-308. (Seen on some Windows builds,
and also on numbers around 1e-317 on Linux.)
o wilcox.test() could give integer overflow warnings on very long
vectors. Also added tests for numeric inputs, as per the help
page. (PR#2453)
o Printing unquoted character vectors containing escape
characters was computing the wrong length and hence
misaligning names. This was due to a bug in Rstrlen which
might have had other effects.
o if(logical(0)) and while(logical(0)) now report zero length,
not `missing value where logical is needed'.
o The gaussian() and inverse.gaussian() families were documented
to allow only one link, which has not been true in R for at
least four years.
o prmatrix() forced conversion to character if `na.print' was
used, and that conversion neither respected `digits' nor
`quote'.
o Rprof() might give misleading results for too small values of
`interval' and in practice the default 20ms was about as small
as is advisable on Linux. Now the interval is forced to be at
least one clock tick.
o summary.data.frame() was not giving interpretable results when
the data frame contained a data frame as a column. (PR#1891)
o delete.response() might re-order the rhs terms so prediction
might fail or even give incorrect results. (PR#2206)
o StructTS() now accepts numeric time series of integer storage mode.
o all(), any() now handle NAs as documented.
o Subsetting arrays to a result with 0 dimension(s) failed if
the array had dimnames. (PR#2507)
o If the call to data.frame() included 0-row arguments, it tried
to replicate them to the maximum number of rows, and failed if
this was 1 or more.
o replicate() now understands data frames to which na.omit() has
been applied.
o is.ts() was too liberal: a time series must have at least one point.
o methods() was sorting by package, not by name.
o symbols(thermometers=) was often giving a spurious warning about
the range.
o tcltk was using deprecated internals of the Tcl library when
accessing error messages. Not likely to be a user-visible
change.
o The automatic search for BLAS libs now tries Sun's libsunperf
the way the latest versions require. (PR#2530)
o str(array(1)) now does show the array.
str(Surv(...)) now works again.
o step(), add1.default() and drop1.default() now work somewhat
better if called from a function.
o page() was searching from the wrong environment, and so
searching base before the workspace.
o crossprod(Z) for complex Z was returning nonsense.
o La.chol2inv() gave incorrect results unless the matrix was square.
o When the POSIXt date functions were required to guess DST,
they sometimes guessed correctly that DST was in force but
converted a POSIXlt time as if standard time was given.
o c/rbind were not handling zero col/row matrices correctly.
(PR#2541 was one symptom.)
o approx() and approxfun() now work with 1 knot if
method = "constant". stepfun(), ecdf() and plot.stepfun() do so
as well.
o AIC.lm/default was failing if multiple objects and k were
specified. (PR#2518)
o removeMethods{methods} was broken. (PR#2519)
o summary.glm() had two `aic' components in the returned object.
o autoload() was returning the value of its last command, a
promise, even though it was documented to have no value.
As a result some packages (e.g. nlme) were loading packages
they meant to autoload.
o Fixes to methods and classes:
- show() is consistent with using setOldClass for S3 classes.
- several problems with the coerce and replace methods
generated by setIs have been fixed.
- more thorough tests & informative messages for invalid
`def' arguments to setGeneric
- setGeneric will now create the generic function even when
a generic of the same name already exists (it does issue
a warning).
o unz() connections could no longer be opened. (PR#2579)
o unique(ordered factor) returned an unordered factor. (PR#2591)
o x[] <- value coerced x to the mode of value if and only if x
had length 0! (Should only happen if x is null: PR#2590)
o lm() mislabelled the cols of the qr decomposition. (cause of PR#2586)
o data() looks for file extensions in an order prescribed in the
help file: previously whether foo.R or foo.csv was used was
locale-dependent.
o sys.function() now returns the actual function being evaluated in
the specified frame rather than one inferred from the call.
o match.call() now uses the definition of the actual function being
evaluated rather than one inferred from the call.
o abbreviate(*, dot = TRUE) now only adds a "." where abbreviations
did happen.
o Changing timezones in the POSIXt functions was not working on
some Linux systems, and this has been corrected.
o ks.test() in package ctest had numerical problems in the lower
tail of the asymptotic distribution (PR#2571).
o Sweave() now handles empty chunks at the end of files correctly.
o [<-() lost the object bit if coercion was involved.
o package::object wasn't being deparsed properly.
o seq.POSIXt() with `by' an object of class "difftime" ignored
the units.
o rank(c("B", NA)) no longer returns character.
o reference to by() added in ?tapply
o ?lm describes what happens with matrix response
o The X11 device has improved event handling. In particular it
used to often miss the last of a series of resize events.
o lm.influence() and related functions now work again for the
multivariate case and when there are zero weights.
o format( <character> ) now always keeps names and dimnames.
o table(factor(c(2,NA), exclude=NULL)) prints better now.
o predict(foo, type = "terms") and hence
residuals(foo, type = "partial") now work for lm and glm objects
with weights zero. Further, model.matrix() is now only called once.
o R CMD config now works correctly when called from a Makefile
using GNU make.
o The data.frame method for rbind() was
- converting character columns to factors,
- converting ordered factor columns to unordered factors,
- failing to append correctly a factor to a character column
and vice versa.
o as.hclust.twins() now does provide proper `labels', `method' and
`call' components.
o cycle() sometimes failed on a time series which started at a cycle
other than 1.
o read.dcf() read incorrectly files which did not end in a new line.
o read.socket() dropped certain non-alphanumeric characters. (PR#2639)
o termplot() handles missing data better (PR#2687,
<Mark.Bravington@csiro.au>)
o Corrected MacRoman encoding for Icircumflex etc.
**************************************************
* *
* 1.6 SERIES NEWS *
* *
**************************************************
CHANGES IN R VERSION 1.6.2
BUG FIXES
o plot.stepfun() now obeys a `ylim=.' specification.
o removeClass() does a better job of removing inheritance
information.
o setIs() will not allow mismatched representations between two
classes (without an explicit coerce method).
o The code underlying polygon drawing contained a memory leak.
This showed up in persp, but did not affect other graphics
functions. It is now possible to draw big DEMs.
o logLik.nls() gave wrong df. (PR#2295)
o rbind() with a mixture of data frames and matrices treated the
matrices as vectors. (PR#2266)
o stripchart(method="stack") was not handling missing values. (PR#2018)
o Arithmetic functions such as log() lost the object bit from
classed objects if coercion was needed. (PR#2315)
o exp_rand would go into an infinite loop if unif_rand returned 0.
o formatC(x, format="fg") could return exponential format if
rounding pushed x over a positive power of 10. (PR#2299)
o attr(x, foo) used partial matching for `foo' (even though not
documented to do so), and failed to find `foo' if there were
two or more partial matches before the exact match in the list
of attributes.
o Rdconv now creates direct HTML hyperlinks when linking to
documentation in the same package. The code now ensures that
links which can be resolved within the package are so resolved,
even when there are possible resolutions in other packages.
o If readBin(what=character()) is used incorrectly on a file which
does not contain C-style character strings, warnings (usually
many) are now given.
o Building libR.so with the zlib in the R sources was not
finding the local zlib headers.
o system(intern=TRUE) has an undocumented line length limit of
119 chars both on Unix and Windows. The limit is now 8096 and
documented. On Unix (only) every 120th character used to be
discarded.
o plot.POSIX[cl]t were not passing graphics parameters on to
axis.POSIXct.
o On some HP-UX systems, installed scripts were not executable
when using the BSD-compatible install system program found by
configure. We now always use install-sh on HP-UX. (PR#2091)
o c() was converting NA names to "NA": now proper NA strings are
used wherever possible. (PR#2358)
o Checks in the C code prevent possible memory faults when
standardGeneric is called invalidly.
o Macros NEW_OBJECT (aka NEW) and MAKE_CLASS added; required by
the .Call interface to generate arbitrary objects.
o A typo was causing segfaults when using data.entry under SuSE.
o mostattributes<-() was failing to copy across dimnames when
one component was NULL, affecting pmax() and pmin() when the
first argument was a matrix. (root cause of PR#2357)
o The pdf() device now initialises graphical parameters
properly. (PR#2281)
o Checks in the C code prevent possible memory faults when
standardGeneric is called invalidly.
o Macros NEW_OBJECT (aka NEW) and MAKE_CLASS added; required by
the .Call interface to generate arbitrary objects.
o Problem that prevented package tcltk from working with Tcl/Tk
8.4 (crash on initialization) resolved. (Notice that binaries
may still require an older Tcl/Tk, for example on Windows).
o type.convert() was not getting the levels right if passed a
character vector containing <NA>s, and `na.strings' did not
contain "NA". This affected read.table().
o Internal match function did not check for nor handle 0-length
vectors. (The R function match() did.) This could cause
type.convert() to segfault.
o The line length limit in output text connections has been
raised to 8095 chars.
o Sweave now uses anonymous file rather than text connections
to avoid the limits of the latter (see previous item).
o parsing did not work on connections when pushback was used (as
it had never been implemented). (PR#2396)
o max.col() only found NAs in the first column (typo).
o Added a workaround for recent versions of glibc (e.g. RedHat 8.0)
with inconsistent mktime/localtime functions which caused
conversion to/from POSIXct times prior to 1970-01-01 to be
inconsistent. On such platforms this is a run-time test to
allow e.g. R compiled on RH7.2 to run on RH8.0.
o Clipping was not being reset properly between plots on the gtk()
device (the default under the GNOME interface). (PR#2366)
o axis(*, fg= cc) now works (again) the same as axis(*, col = cc).
CHANGES IN R VERSION 1.6.1
NEW FEATURES
o Added a few "trivial and obviously missing" functions to tcltk:
tkchooseDirectory, tkpopup, tkdialog, tkread
o barplot() has a new argument `axis.lty', which if set to 1
allows the pre-1.6.0 behaviour of plotting the axis and tick
marks for the categorical axis. (This was apparently not
intentional, but axis() used to ignore lty=0.)
The argument `border' is no longer ".NotYetUsed".
BUG FIXES
o hist(<datetime>, cex.axis = f) now works for x-axis too.
o prompt() gave wrong \usage{.} for long argument default expressions.
o summary(x) gives more information when `x' is a logical
(or a data frame with a logical column which is now quite customary).
o seq.POSIXt(from, to, length.out= . ) could give too long results
o summaryRprof() was counting nested calls to the same function
twice.
o Printing of objects of mode "expression" did strange things if
there were "%" characters in the deparsed expression (PR#2120).
o as.matrix.data.frame converted missings to "NA" not character NA.
(PR#2130)
o spec.pgram() was only interpolating zero freq for one series. (PR#2123)
o help(randu) had % unescaped in the example. (PR#2141)
o Making html links would fail if packages-head.html was not
writeable. (PR#2133)
o Sweave.sty was not installed to $R_HOME/share/texmf when
builddir != srcdir. On Windows backslashes in latex paths have
to be replaced by slashes.
o A memory leak in deparsing was introduced when eliminating
static variables (thanks to Achim Zeileis for spotting this).
A similar problem in loading workspaces has been corrected.
o TclInterface.Rd incorrectly used \synopsis for \usage so that
the usage section wasn't output.
o Readline stack off-by-one error. (PR#2165)
o R_ExpandFileName had a memory leak in the case libreadline was
used under Unix-alikes.
o sys.save.image() now closes all connections so it will work even
if the connection list has become full.
o loess() had an unstated limit of four predictors: this is now
documented and enforced.
o ${R_HOME}/etc/Renviron.site is now not read if R_ENVIRON is
set, as documented. Previously it was read unless R_ENVIRON
pointed to an actual file.
o Startup.Rd described the processing under Unix-alikes but
incorrectly implied it happened that way on the Windows and
Mac OS ports. Neither use Renviron.site, for example.
o besselK(x,*) now returns 0 instead of Inf for large x. (PR#2179)
o The Tcl console code didn't work with Tcl/TK 8.0, and has been
#ifdef'd out. (PR#2090)
o format.AsIs() was not handling matrices.
o sd() was not passing na.rm to var() for matrices and data frames.
o dist() {mva} silently treated +/-Inf as NA.
o setwd() now returns NULL invisibly.
o basename() and dirname() did not check the length of their
input and ignored elements after the first. This affected
undoc {tools}.
o If A had dimnames, eigen(A) had inappropriate dimnames. (PR#2116)
o as.POSIXct.dates had a sign error for the origin (PR#2222)
o The claim that pie charts should be avoided (in pie.Rd) is now
supported by a quote from Cleveland (1985).
o The vsnprintf() functions supplied for systems that don't
supply their own had a bug in the output of fractional parts,
corrupting data if using save() with ascii=TRUE. (PR#2144)
o pretty() values close to 0 in some cases which are now 0 (PR#1032
and D.Brahm's mails).
o factor.scope() was giving an error rather than a reasonable
default in some cases when it was called incorrectly (e.g. via
incorrect formula in add1()).
BUILD ISSUES
o Toplevel Makefile was missing dependency of "docs" on "R" (causing
parallel makes to go wrong)
o When building with recommended packages those were installed
into the first path in R_LIBS, if the environment variable was
present.
CHANGES IN R VERSION 1.6.0
USER-VISIBLE CHANGES
o The default colour palette now has "grey" instead of "white"
in location 8. See palette().
o grid(nx) behaves differently (but the same as in R versions <= 0.64).
NEW FEATURES
o New operator :: in the grammar, for name spaces.
o New faster rowsum(), also works on data frames.
o grep(), (g)sub() and regexpr() have a new argument `perl'
which if TRUE uses Perl-style regexps from PCRE (if installed).
New capabilities option "PCRE" to say if PCRE is available.
o Preparations for name space support:
- Functions in the base package are now defined in a name space.
As a temporary measure, you can disable this by defining the
environment variable R_NO_BASE_NAMESPACE.
- UseMethod dispatching now searches for methods in the
environment of the caller of the generic function rather
than the environment where the generic is defined.
o The objects created in the methods package to represent
classes, generic functions, method definitions, and
inheritance relations now themselves belong to true classes. In
particular, the "classRepresentation" objects follow the description
in "Programming with Data" (section 7.6).
o Other additions and changes to the methods package:
- The function setOldClass() has been added, following the
description on page 450 of "Programming with Data". Use it
if old-style classes are to be supplied in signatures for
setMethod, particularly if the old-style classes have
inheritance. Many of the old-style classes in the base
package should be pre-specified; try getClass("mlm"), e.g.
- The setGeneric() function applies some heuristics to warn
about possibly erroneous generic function definitions.
(Before, obscure bugs could result.)
- The function promptMethods() has been revised to work better
and to provide aliases for individual methods.
- The behavior of the as() function has been generalized, in
particular with a strict= argument, the general goal being
to let simple extensions of classes pass through in method
dispatch and related computations without altering the
objects. More to make method behavior more "natural" than
for direct use.
- Some inconsistencies following detach("package:methods")
have been removed, so it _should_ be possible to
detach/re-attach the methods package.
o New methods ([[, print, str) and extended plot() method
(incl. logical `horiz') for "dendrogram" class.
o sprintf() now checks the agreement between formats and object
types, and handles special values (NA, Inf, ...) correctly.
o chol() now uses a tolerance for non-positive-definiteness and
so should give more consistent results across platforms.
o New function agrep() for approximate (fuzzy) string matching.
o help.search() can now use both approximate (fuzzy) and regular
expression matching. By default, if the pattern to be matched
consists of only alphanumeric characters, whitespace or a dash,
approximate matching is used.
o axis() has three new optional arguments `col', `lty', and `lwd'
all for drawing the axis line and tick marks.
o Function vcov() (formerly in MASS), a generic function to
return the variance-covariance matrix of the parameter
estimates of a fitted model.
o duplicated() and unique() have methods for matrices and arrays
(based on ideas from Jens Oehlschlaegel).
o Internally memory sizes and counts of cons cells are now stored
in unsigned longs. This allows memory limits to be set and
objects created in the range 2-4Gb on 32-bit platforms, and
allows 64-bit platforms to use much larger amounts of memory.
o Command-line flags to set memory can now use the suffix `G'
for gigabytes. The setting of maximum vsize is now only
limited by the platform's address space.
o All warning and error messages are truncated to a length set
by options(warning.length=), defaulting to 1000. (Previously
most (but not quite all) were truncated at 8192 characters.)
o [dpqr]gamma() check for shape parameter > 0.
o as.POSIX[cl]t can now convert logical NAs.
o All installed packages (even those shipped with R) are
given a `Built' field in the DESCRIPTION file.
o as.data.frame() now coerces logical matrices into logical
columns (rather than factors).
o [[<-.data.frame no longer coerces character replacement values
to factor. This is consistent with using $ to replace and
with S4.
o library() attempts to detect improperly installed packages, so
as from this version an installed package must have a
DESCRIPTION file and that file must have been stamped with a
`Built:' line (which was introduced in 1.2.0). Under
Unix-alikes, the platform is checked against that used for
installation.
o print.factor() has new arguments `max.levels' (with a smart default)
and `width'. print.ordered() is no longer needed.
o RNGkind() has an additional option for normal random generators:
"Inversion".
o data.frame() recycles factors and "AsIs" objects as well as
atomic vectors.
o predict.lm() warns if `newdata' is supplied and the fit was
rank-deficient, as this can be misleading.
o rect() accepts additional graphics parameters through a ...
argument (in the same way as polygon).
o strwidth/strheight() now coerce their first argument in exactly
the same way text() does, so a wider range of inputs is allowed.
o prompt()'s default and data.frame methods have a new 3rd argument
`name' allowing them to used more easily in scripts and loops.
o rgb() has a new `maxColorValue' argument, allowing r,g,b in [0,M],
particularly in {0:255}, efficiently and non-error-prone.
o summaryRprof() provides the functionality of R CMD Rprof in R
code, though more slowly.
o stop() accepts multiple arguments (which are concatenated)
just as warning() does.
o scan() now throws an error with incorrect logical input (which
was previously taken as FALSE).
o pdf() now uses PDF not R code for clipping, which ensures that
partially visible text strings are (partially) shown.
o Each R session uses a per-session temporary directory which
is removed at normal termination. The directory name is given
by the tempdir() function, and filenames returned by
tempfile() will be within that directory.
o help.start() on Unix now uses a .R subdirectory of the
per-session temporary directory and not ~/.R. A side effect
is that ~/.R is now never deleted by R.
This now uses the remote control mechanism only if the X
display is local to the R process (as otherwise it might use a
browser running on an arbitrary machine).
o *Very* experimental browseEnv() for browsing objects in an
environment.
o cbind/rbind() used to ignore all zero-length vectors, an
undocumented quirk for S-compatibility. This caused problems
when combining zero-extent matrices and zero-length vectors, and
now zero-length vectors are ignored unless the result would
have zero rows/columns.
o read.table(stdin()) will now work.
o plot.spec(x) now also works for other x than AR and Pgram results.
o New functions La.chol() and La.chol2inv() for Cholesky
decomposition and inverse of positive definite matrices using
Lapack.
o Changes to the tcltk package
- on Unix systems, the Tcl event loop has been integrated with
R's own (so that tkwait.variable() no longer halts updates of
plot windows).
- also on Unix, stubs have been created to divert R's input
and output routines to go via Tcl commands. (Nothing
uses this at present, but packages might be developed to
take advantage of it.)
- return value from Tcl commands is no longer invisible. A new
print method, print.tclObj(), has been introduced.
- Tcl variables created by tclVar() are now explicitly put into
Tcl's global namespace, removing potential scoping problems.
- The tcltk dynamic library now loads with local=FALSE since
the default had trouble when loading Tcl extensions
(e.g. Tix)
- The tkpager() function had not been updated for the return
value change from 1.5.0
o The bmp(), jpeg() and png() devices can produce multiple
bitmap files, one for each page. The default filenames have been
changed to include a sequence number.
o New function axTicks() returning tick mark locations like axis().
o grid() has a more sensible default behavior. Tick axis alignment
only happens when no numbers of grid cells are specified. New
arguments lwd and equilogs; nx/ny = NA for not drawing, see ?grid.
o installed.packages() has a new argument `priority'.
o termplot() uses factor levels rather than 1,2,3... for x-axis.
o Workaround for optimization bugs on gcc 3.1/2 on 32-bit Solaris.
o The trace() function has been robustified and a new function
tracingState() added to turn tracing temporarily on and off.
o New cophenetic() in "mva" as utility for hierarchical clustering.
o p.adjust() has two new methods, 'Hommel' and 'FDR', contributed
by Gordon Smyth <smyth@wehi.edu.au>.
o stars() now has add and plot arguments.
DEPRECATED & DEFUNCT
o The assignment operator `_' is deprecated: a warning is given
once per R session.
o machine() is deprecated in favour of .Platform$OS.type.
Machine() and Platform() are deprecated in favour of .Machine
and .Platform.
o arima0.diag() (package ts) is defunct.
o piechart() is defunct.
o print.ordered() has been removed, so print.factor() is used.
o The global internal variables .Dyn.libs and .lib.loc are
removed in favor of the internal functions .dynLibs() and
.libPaths().
o restart() is deprecated in preparation for proper exception
handling. Use try(), as has long been recommended.
DOCUMENTATION CHANGES
o New demo(persp) containing some of the former example(persp) ones
and more.
C-LEVEL FACILITIES
o Rversion.h is no longer automatically included by R.h.
Include it explicitly if you need it.
o New entry point R_tmpnam in Utils.h.
o The Unix event loop interface has been changed to facilitate
integration with other loops. R_checkActivity and
R_runHandlers should eventually replace getSelectedHandler.
INSTALLATION CHANGES
o Perl 5.005 or newer is now required.
o R CMD INSTALL is now guaranteed to sort the R source files in
ASCII order.
UTILITIES
o R CMD check now tests for mis-use on an installed or binary
package, and sets 'T' and 'F' to 'NULL' when running the
examples.
o New function SweaveSyntConv() converts between Sweave file
syntaxes. RweaveLatex() now gets its prompt from options() and
uses the text width as linebreak cutoff for deparsing input
statements.
BUG FIXES
o axis() was not respecting par("mgp")[3] by default.
(PR#916)
o tcltk back-compatibility fix for tcl8.0
o hist.POSIXct(*, breaks) now works for `breaks = #{breaks}' and
when `x' has NAs; the latter applies to cut.POSIXct() as well.
o The internal download.file() methods were setting the proxy
port to 0 unless it was specified.
o poly() did not work for >=3 column matrices.
o cut.default() was not handling infinite values with infinite
breaks. (PR#1694)
o ks.test() could fail due to integer overflow if n.x and n.y
were both large.
o all.equal(3., 3:3) wasn't TRUE when the methods package was
present.
o read.table() could remap non-syntactic names to duplicates,
and did not check for duplicated names.
o ls.str(envir = environment(F)) now works (when F is a function).
o pie() now has a `border' (and 'lty') argument which allows empty
slice borders and makes pie() useable for hundreds of slices.
o all.equal.character() now works correctly also when NAs don't
match (PR#1767).
o all.equal.numeric() now gives character {instead of list} when
lengths don't match.
o read.dcf() had a memory leak.
o Setting "tcl = a" in a highlevel graphic function worked almost
as if par(tcl = a) was called (i.e. was persistent). Further,
after par(tcl= <.>), highlevel graphic setting of tcl didn't work
anymore. "tck" has now S's default of -0.01 (when tcl=NA).
o data() was not checking if ./data was a directory before
warning.
o Assignment beyond the end of character strings was filling
with "", whereas changing the length extended with NA_STRING.
Now NA_STRING is used for both.
o boxplot()s with logarithmic scale in "width-direction" now have
proper widths, i.e. typically constant.
o Using GNU readline in asynchronous event callbacks (e.g. TclTk
or Gtk) works correctly, i.e. doesn't cause readline to abort
the process.
o Using Q to exit a browser invoked at the top-level could lead to
the browser being invoked on all future top-level loops (PR#1721)
o step(fit, direction="both") now uses both directions even if
no scope is supplied.
o strwidth(), strheight() now give 0 on NA strings (as they
are no longer plotted). (PR#1739)
o mtext(), persp(), plot.hclust() and title() no longer plot NA
character strings.
o pdf() has been protected against the user who specified
non-existent fonts. (PR#1748)
o dlnorm() returns zero for negative x argument. (PR#1781)
o Printing 0 in octmode gave "" not "0". (PR#1759)
o anova.glm() was ignoring a `dispersion' argument if given
multiple objects. (PR#1807)
o model.matrix() with a `rhs ~ .' formula included columns with
duplicated names in the data frame, which caused subsequent
confusion (e.g. in prediction from the object).
model.matrix() was sometimes incorrectly determining the first
factor in a formula without an intercept.
o termplot() now needs data= argument more rarely. (PR#828)
o abline() on log scale doesn't draw -ve points. (PR#1243)
o The Java search engine now works within Mozilla 1.0 and
Netscape 6.2.x / 7.0pr1.
o unsplit() failed if f was a list of factors. (PR#1843)
o The methods package generic version of primitives is now "sealed"
and cannot be redefined (it was always a bad idea to do so).
o quantile() gave -Inf not NaN in some examples. (Related to PR#1852)
o read.table() read too far in checking the file structure if
0 < nrows < 5 and more rows existed on the file. (PR1809)
o loess() was not checking for too small a span (so no points
were included in the smoothing window).
o match() was assuming that there was only one possible bit
pattern for a numeric NA, so some matches failed on Solaris
under some compiler options.
o identical() no longer thinks NaN and as.double(NA) are identical.
o pipe() can open in a binary mode even on Linux (where popen
cannot).
o zero-column matrices were not being printed at all, not even
the row names.
o polygon()'s `border' argument was incorrectly documented: in
particular `border = 0' plots in background colour.
o delete.response() was losing the attribute set for safe
prediction. (PR#1840)
o poly() was checking the degree against the number of points
even when predicting.
o Comparison of a data frame and list failed due to typo. (PR#1889)
o dput() and dump() attempt to check if writing succeeded. (PR#1884)
o rep(1:2, 0) and hence array(1:2, 0) fail no longer.
o apply(matrix("", 3, 0), 2, length) now works.
o order(na.last = NA, decreasing = TRUE) now sorts in decreasing
order. (PR#1906)
o order(na.last=NA) failed if all args were of length 1 or all
were NA. (PR#1913, 1981)
o source() would crash if the `keep.source = TRUE' and the input
contained a function with a line longer than 1024 chars. (PR#1900)
The limits on nesting of functions and on total function size
when the source is kept are now enforced. As (incorrectly)
the source was always kept, this meant functions longer than
128Kb could crash R, even in packages.
o lqs() and cov.rob() check that the quantile argument does not
exceed n-1.
o grid() now also works with log coordinates active.
o plot.table(tab, xlab="X", ylab="Y") now works as expected.
o plot.formula(ask=FALSE) now works. (PR#1923)
o as.list(<logical>) now works properly. (PR#1926).
o The residual SSq printed from an aov() fit with weights is
now the weighted SSq. (PR#1930)
o aov() could still fail on multistrata models with very long
Error formulae.
o try() could fail in BATCH use due to use of fflush(stdin).
Only seen on Solaris. (PR#1934)
o title(main=list("main")) printed garbage, as did similar calls
using quote() instead of expression() for plotmath. (PR#1939)
o deparse() dropped parentheses in some case where they were
needed. (PR#1119, 1737, 1928, at least)
o pdf(onefile = FALSE) never incremented the file number beyond
two.
o On Unix, protect against broken pipes where popen calls succeed
even though the command does not exist (and the glibc manual
says it should return NULL). (PR#1959)
o data.frame() was allowing explicit row.names with missing
values, but row names are required to be unique.
o as.character(expression) was silently truncating to 60
characters: the help page claimed 500 which is now true.
o as.hclust(x) now also works (as identity) for "hclust" objects.
o NextMethod didn't work right in Ops.
o dotchart() now obeys `xlim ='.
o t(x) behaves when x is a (multivariate) time series. (PR#1998)
o parse(text=x) no longer parses from stdin if length(x) is zero
o binom.test() miscalculated p-value in some extreme cases
o get("print.ts")(1) would segfault. It's now just an error.
o cbind(NULL) {and similar} gave an error instead of NULL.
o the complex version of solve(a,b) now also works if b is a
vector
CHANGES IN R VERSION 1.5.1
NEW FEATURES
o Enhancements to mathematical annotation of plots:
- expressions involving dot(<something>) now produce a dot accent
above the <something> (initial patch from Ben Bolker).
- within an expression, the symbol partialdiff is now converted
to a partial differential symbol (greek delta).
o smooth.spline() has a new argument `nknots' allowing to set the
default number of knots (when `all.knots = FALSE' as per default).
BUG FIXES
o Rdconv now skips CRs in input files, even on Unix.
o readBin() had a (very slow) memory leak if changing size or reading
character strings. writeChar() had a memory leak.
o polygon() and rect() with lty = "blank" were omitting the fill
colour (if present). symbols(circles=, lty="blank") was
drawing the border of the disks.
o Subsetting non-existent rows in a data frame would produce
missing row names, which are not allowed.
o On Unix, R_PAPERSIZE was set to '' instead of 'a4' as default on
systems without paperconf.
o Under GNOME, capabilities() now reports correctly that X11, png
and jpeg are available (if they are under X11).
o The names of some results of unlist() had the wrong internal
length, which confused paste(). Both have been corrected. (PR#1524)
o RweaveLatex.Rd had unbalanced braces in section "Supported
Options".
o merge() with multiple and differently-named match columns
failed. (PR#1510)
o NAs in right-justified unquoted character matrices were being
mis-aligned. This mainly affected printing data frames.
o predict.*bSpline() bugs extrapolating for deriv >= 1 (PR#1473),
and predict.[bn]s bug e.g. for bs(x), reported by Ch.Sangiorgio.
o qr.X was failing if n < p. Fixed, but only in the case when
pivoting does not occur. (PR#1519)
o xx[, 1:3] was returning a list if xx had only one row, even
though xx[1, 1:3] was a data frame. (PR#1530)
o nls() was reporting incorrectly the number of iterations if the
maximum was reached.
o rbind.data.frame() was coercing logical columns to factors.
(PR#1536)
o Rprof(NULL) or Rprof("") called when not profiling caused a
segfault: now silently ignored. (PR#1471)
o On systems (e.g. Windows) using R's own code for expm1, the
values were wrong for large negative x, and this affected
pweibull(), for example.
o prettyNum(*, bigmark=*) added extra marks in some cases. (PR#1548)
o cut.dendrogram() failed in some cases. (PR#1552)
o The links in refman.pdf were broken by a single invalid
\alias{}. Now Rdconv checks more comprehensively. (PR#1550)
o predict(smooth.spline(x,*), deriv =1) did not predict at all `x'
values, and
smooth.spline(x,*, all.knots = TRUE) used much too much memory
when length(x) was largish.
smooth.spline(*, .... trace = TRUE ..) is a bit more self-explaining.
o pexp(x, log=TRUE) and pweibull(*) were losing precision for large x.
o Workaround for NetBSD bug in compiling dounzip.c. (PR#1565/6)
o Conversions to numeric in type.convert were always treating "NA" as
missing whatever the setting of na.strings. (PR#1568)
o R CMD check now deals correctly with package names containing a
'.' in the Depends field of a DESCRIPTION file. (PR#1591)
o pbinom() and pbinom() were misssing the "fuzz" that other discrete
distributions have in order to guard against truncation.
o The "=" assignment operator behaved as "<<-" in some constructions
with composite left-hand sides.
o Added print.AsIs() method to ensure "AsIs" objects are printed
by the method for their real class. (PR#1587)
o mosaicplot(*, color = v) now recycles v[] if needed.
o Calling dev.control("inhibit") with no graphics device open
crashed R. (PR#1605)
o read.dcf() was not checking that memory allocation succeeded.
o The C function fprec might overflow for > 16 digits, showing
up in example(str) on some platforms.
o Changes to the methods package:
- Nonstandard generic function definitions given to
setGeneric now work; these were previously ignored.
- Classes that extend matrix, etc. as the data part previously lost
their attributes.
- There were bugs in distinguishing methods for "missing" from
methods for "ANY".
- Some coerce methods were not selected correctly when the two classes
were related by an "is" relation.
- extends() now works correctly if given a class definition rather
than a name.
- class()<- was leaving in an explicit class attribute for basic data
types.
- Method signatures including arguments following "..." in the
argument list of the generic didn't work.
o par(mgp = v) now allows negative `v' (S-compatibly and sensibly).
o identify.hclust() masked its `x' argument and so failed.
o System rint was never being used in fround.c.
o round/trunc.POSIXt were erroneously retaining information on
DST. (PR#1543)
o tcltk package didn't work with tcl8.0.x. Compatibility code
inserted (PR#1640, thanks to Rene' Bertin for helping out with
this).
o selfStart() {pkg "nls"} now works again when parameter names are
not specified (but implicit).
o legend() now treats lty="0" properly (as solid).
o ARMAacf was failing if 0 < p < q+1: it failed to say that ar needed
to be padded with zeroes, and now the code does that.
o old.packages() was assuming a bundle was installed in only one
library, and so update.packages() would only update a bundle
in the first location in lib.loc.
o fisher.test() could miscalculate odds ratio and confidence
interval for tables with large entries, due to numerical
overflow.
o Using lty = "1" (or "10") does no longer produce invalid
postscript or pdf. Using "0" in a character lty is currently not
implemented device-independently and needs more fixing.
o ccf(plot = FALSE) was returning a spurious extra 0 at lag 0.
o On console-based versions of R (Windows, GNOME, probably
Mac OS) warning/error messages longer than 8192 chars could
crash R. (PR#1651)
o Comparisons between objects of mode "call" using "==" now return
TRUE if both sides deparse to the same string (as always intended).
o HoltWinters() now initializes correctly in the exponential
smoothing case, and plot.HoltWinters() allows lty to be set.
o fisher.test() crashed due to corruption on some large
problems. It also crashed on tables with total one. (PR#1662)
o The substitution code for strptime (used e.g. on Windows)
cached the month names and so did not recognise locale changes
during an R session, as used by get.hist.quote{tseries}.
Caching has been supressed. (PR#1116)
o Some functions used the non-existing error() function instead
of stop().
o vector("complex",n) doesn't return random garbage anymore.
CHANGES IN R VERSION 1.5.0
USER-VISIBLE CHANGES
o XDR support is now guaranteed to be available, so the default
save format will always be XDR binary files, and it is safe to
distribute data in that format. (We are unaware of any
platform that did not support XDR in recent versions of R.)
gzfile() is guaranteed to be available, so the preferred
method to distribute sizeable data objects is now via
save(compress = TRUE).
o pie() replaces piechart() and defaults to using pastel colours.
o formatC has new arguments (see below) and formatC(*, d = <dig>)
is no longer valid and must be written as formatC(*, digits = <dig>).
o Missingness of character strings is treated much more
consistently, and the character string "NA" can be used as a
non-missing value.
o summary.factor() now uses a stable sort, so the output will
change where there are ties in the frequencies.
NEW FEATURES
o Changes in handling missing character strings:
- "NA" is no longer automatically coerced to a missing value
for a character string. Use as.character(NA) where a missing
value is required, and test via is.na(x) not x == "NA".
String "NA" is still converted to missing by scan() and
read.table() unless `na.strings' is changed from the default.
- A missing character string is now printed as `NA' (no quotes)
amongst quoted character strings, and `<NA>' if amongst
unquoted character strings.
- axis() and text.default() omit missing values of their
`labels' argument (rather than plotting "NA").
- Missing character strings are treated as missing much more
consistently, e.g. in logical comparisons and in sorts.
identical() now differentiates "NA" from the missing string.
o Changes in package methods:
- New function validSlotNames().
- Classes can explicitly have a "data part", formally
represented as a .Data slot in the class definition, but
implemented consistently with informal structures. While the
implementation is different, the user-level behavior largely
follows the discussion in "Programming with Data".
- A "next method" facility has been provided, via the function
callNextMethod(). This calls the method that would have been
selected if the currently active method didn't exist. See
?callNextMethod(). This is an extension to the API.
- Classes can have initialize methods, which will be called
when the function new() is used to create an object from the
class. See ?initialize. This is an extension to the API.
- The logic of setGeneric() has been clarified, simplifying
nonstandard generic functions and default methods.
o Changes in package tcltk:
- Now works with the GNOME user interface.
- Several new functions allow access to C level Tcl objects.
These are implemented using a new `tclObj' class, and this
is now the class of the return value from .Tcl() and tkcmd().
o Changes in package ts:
- More emphasis on handling time series with missing values
where possible, for example in acf() and in the
ARIMA-fitting functions.
- New function arima() which will replace arima0() in due
course. Meanwhile, arima0() has been enhanced in several
ways. Missing values are accepted. Parameter values can
be initialized and can held fixed during fitting. There is
a new argument `method' giving the option to use
conditional-sum-of-squares estimation.
- New function arima.sim().
- New datasets AirPassengers, Nile, UKgas and WWWusage,
and a expanded version of UKDriverDeaths (as a multiple
time series Seatbelts).
- New generic function tsdiag() and methods for arima and arima0,
to produce diagnostic plots. Supersedes arima0.diag().
- New functions ARMAacf() and ARMAtoMA() to compute
theoretical quantities for an ARMA process.
- New function acf2AR() to compute the AR process with a given
autocorrelation function.
- New function StructTS() to fit structural time series, and
new generic function tsSmooth() for fixed-interval
state-space smoothing of such models.
- New function monthplot() (contributed by Duncan Murdoch).
- New functions decompose() and HoltWinters() (contributed by
David Meyer) for classical seasonal decomposition and
exponentially-weighted forecasting.
o An extensible approach to safe prediction for models with e.g.
poly(), bs() or ns() terms, using the new generic function
makepredictcall(). Used by most model-fitting functions
including lm() and glm(). See ?poly, ?cars and ?ns for
examples.
o acosh(), asinh(), atanh() are guaranteed to be available.
o axis() now omits labels which are NA (but still draws the
tick mark.
o Connections to bzip2-ed files via bzfile().
o chol() allows pivoting via new argument `pivot'.
o cmdscale() now takes rownames from a dist object `d' as well
as from a matrix; it has new arguments `add' (as S) and `x.ret'.
o crossprod() handles the case of real matrices with y = x
separately (by accepting y = NULL). This gives a small
performance gain (suggestion of Jonathan Rougier).
o deriv/deriv3() can now handle expressions involving pnorm and
dnorm (with a single argument), as in S-PLUS.
o New function expm1() both in R and in C API, for accurate exp(x)-1;
precision improvement in pexp() and pweibull() in some cases.
(PR#1334-5)
o New function findInterval() {using new C entry point
findInterval, see below}.
o formatDL() now also works if both items and descriptions are
given in a suitable list or matrix.
o gzfile() is guaranteed to be available, and hence the
`compress' option to save() and save.image().
o hist() now has a method for date-time objects.
o library() now checks the dependence on R version (if any) and
warns if the package was built under a later version of R.
o library(help = PKG) now also returns the information about the
package PKG.
o Added function logb(), same as log() but for S-PLUS
compatibility (where log now has only one argument).
o New na.action function na.pass() passes through NAs unaltered.
o piechart() has been renamed to pie(), as piechart is a Trellis
function for arrays of pie charts. The default fill colours
are now a set of pastel shades, rather than par("bg").
o plclust() in package mva, for more S-PLUS compatibility.
o poly() now works with more than one vector or a matrix as input,
and has a predict method for objects created from a single
vector.
o polyroot() now handles coefficient vectors with terminal
zeroes (as in S).
o New prettyNum() function used in formatC() and format.default()
which have new optional arguments `big.mark', `big.interval',
`small.mark', `small.interval', and `decimal.mark'.
o print.coefmat() has a new argument 'eps.Pvalue' for determining
when small P-values should be printed as "< {...}".
o The recover() function has been moved to the base package.
This is an interactive debugging function, usually a good
choice for options(error=). See ?recover.
o rep() has a new argument `each' for S-PLUS compatibility.
The internal call is made available as rep.int(), again for
help in porting code.
o New functions rowSums(), colSums(), rowMeans() and colMeans():
versions of apply() optimized for these cases.
o rug() now has a "..." argument allowing its location to be specified.
o scan() can have NULL elements in `what', useful to save space
when columns need to be discarded.
o New option by = "DSTday" for seq.POSIXt().
o Changes to sorting:
- sort(), sort.list() and order() have a new argument
`decreasing' to allow the order to be reversed whilst
still preserving ties.
- sort() has an option to use quicksort in some cases
(currently numeric vectors and increasing order).
- The default Shell sort is Sedgewick's variant, around 20%
faster, and pre-screening for NAs speeds cases without any
NAs several-fold.
- sort.list() (and order with just one vector) is several
times faster for numeric, integer and logical vectors, and
faster for character vectors.
o New assignment forms of split(); new function unsplit().
o New sprintf() function for general C like formatting, from
Jonathan Rougier.
o Argument `split' of summary.{aov,aovlist} is now implemented.
o summary.princomp() now has a separate print() method, and
`digits' is now an argument to the print method and not to
summary.princomp itself.
o An extended version of the trace() function is available,
compatible with the function in S-PLUS. Calls to R functions
can be inserted on entry, on exit, and before any
subexpressions. Calls to browser() and recover() are useful.
See ?trace.
o New function TukeyHSD() for multiple comparisons in the results
of aov(). (Formerly function Tukey in package Devore5 by
Douglas Bates.)
o New read-only connections to files in zip files via unz().
o warning() has new argument `call.', like stop()'s.
o zip.file.extract() is no longer provisional and has an
"internal" method available on all platforms.
o Methods for [, [<- and as.data.frame() for class "POSIXlt".
o Much improved printing of matrices and arrays of type "list".
o The "Knuth-TAOCP" option for random-number generation has been
given an option of using the 2002 revision. See ?RNG for the
details: the R usage already protected against the
reported `weakness'.
o min/max of integer(0) (or NULL) is now Inf/-Inf, not an
extreme integer.
DEPRECATED & DEFUNCT
o .Alias, reshapeLong(), reshapeWide() are defunct.
o arima0.diag() (package ts) is deprecated: use tsdiag() instead.
o piechart() is deprecated; renamed to pie().
DOCUMENTATION CHANGES
o `Writing R Extensions' now has an example of calling R's
random numbers from FORTRAN via C.
o R itself and all R manuals now have ISBN numbers, please use
them when citing R or one of the manuals.
INSTALLATION CHANGES
o The configure script used when building R from source under Unix
is now generated using Autoconf 2.50 or later, which has the
following 'visible' consequences:
- By default, configure no longer uses a cache file. Use the
command line option '--config-cache' (or '-C') to enable
caching.
- Key configuration variables such as 'CC' are now *precious*,
implying that the variables
* no longer need to be exported to the environment and can and
should be set as command line arguments;
* are kept in the cache even if not specified on the command
line, and checked for consistency between two configure runs
(provided that caching is used, see above);
* are kept during automatic reconfiguration as if having been
passed as command line arguments, even if no cache is used.
See the variable output section of 'configure --help' for a
list of all these variables.
o Configure variable 'FC' is deprecated, and options '--with-g77',
'--with-f77' and '--with-f2c' are defunct. Use configure
variable 'F77' to specify the FORTRAN 77 compiler, and 'F2C' to
specify the FORTRAN-to-C compiler and/or that it should be used
even if a FORTRAN 77 compiler is available.
o Non-standard directories containing libraries are specified
using configure variable 'LDFLAGS' (not 'LIBS').
UTILITIES
o Sweave(), Stangle() and friends in package tools. Sweave allows
mixing LaTeX documentation and R code in a single source file:
the R code can be replaced by its output (text, figures) to
allow automatic report generation. Sweave files found in
package subdir 'inst/doc' are automatically tested by R CMD
check and converted to PDF by R CMD build, see the section on
package vignettes in the 'Writing R Extensions' manual.
o Rdconv can convert to the S4 '.sgml' format.
o R::Utils.pm masks some platform dependencies in perl code by
providing global variables like R_OSTYPE or wrapper functions
like R_runR().
o If a directory 'inst/doc' is present in the sources of a
package, the HTML index of the installed package has a link to
the respective subdirectory.
o R CMD check is more stringent: it now also fails on malformed
'Depends' and 'Maintainer' fields in 'DESCRIPTION' files, and on
unbalanced braces in Rd files. It now also provides pointers to
documentation for problems it reports.
o R CMD check, build and INSTALL produce outline-type output.
o QC functions in package 'tools' now return the results of their
computations as objects with suitable print() methods. By
default, output is only produced if a problem was found.
o New utility R CMD config to get the values of basic R configure
variables, or the header and library flags necessary for linking
against R.
o Rdindex and maketitle.pl require perl 5.005, as Text::Wrap::fill
was only introduced at 5.004_05.
C-LEVEL FACILITIES
o All the double-precision BLAS routines are now available,
and package writers are encouraged not to include their own
(so enhanced ones will be used if requested at configuration).
o findInterval(xt[],n,x,...) gives the index (or interval number)
of x in the sorted sequence xt[]. There's an
F77_SUB(interv)(.) to be called from Fortran; this used to be
part of predict.smooth.spline's underlying Fortran code.
o Substitutes for (v)snprintf will be used if the OS does not
supply one, so tests for HAVE_(V)SNPRINTF are no longer needed.
o The DUP and NAOK arguments in a .C() call are not passed on
to the native routine being invoked. Any code that relied on
the old behaviour will need to be modified.
o log1p is only provided in Rmath.h if it is not provided by the
platform, in which case its name is not remapped, but a
back-compatibility entry point Rf_log1p is provided.
Applications using libRmath may need to be re-compiled.
o The methods used by optim() and integrate() have entry points in
R_ext/Applic.h and have a more general interface documented in
`Writing R Extensions'.
o The bessel_? entry points are now suitable to be called
repeatedly from code loaded by .C(). (They did not free
memory until .C() returned in earlier versions of R.)
o Server sockets on non-Windows platforms now set the SO_REUSEADDR
socket option. This allows a server to create simultanous
connections to several clients.
o New quicksort sorting (for numeric no-NA data), accessible from
C as R_qsort() etc and from Fortran as qsort4() and qsort3().
o Rinternals.h no longer includes fcntl.h, as this is not an
ISO C header and cannot be guaranteed to exist.
o Fortran subroutines are more correctly declared as `extern void'
in R_exts/Applic.h and R_exts/Linpack.h.
BUG FIXES
o The calculation of which axes to label on a persp() plot was
incorrect in some cases.
o Insufficient information was being recorded in the display list
for the identify() function. In particular, the "plot="
argument was ignored when replaying the display list. (PR#1157)
o The vertical alignment of mathematical annotations was wrong.
When a vertical adjustment was not given, it was bottom-adjusting
i.e,. it was treating adj=0 as adj=c(0, 0). It now treats
adj=0 as adj=c(0, 0.5) as for "normal" text. (PR#1302)
o the man page (doc/R.1) wasn't updated with the proper VERSION.
o smooth.spline() had a "df = 5" default which was never used and
hence extraneous and misleading.
o read.fwf() was interpreting comment chars in its call to scan:
replaced by a call to readlines(). (PR#1297/8)
o The default has been changed to scan(comment.char="") for
consistency with earlier code (as in the previous item).
o bxp(*, notch.frac = f) now draws the median line correctly.
o Current versions of gs were rotating the output of
bitmap(type = "pdfwrite") and when converting the output
of postscript() to PDF; this has been circumvented by
suppressing the %%Orientation comment for non-standard
paper sizes.
o plot.ts(x, log = "y") works again when x has 0s, also for matrix x.
o add1(), drop1(), step() work again on glm objects with
formulae with rhs's containing `.'. (Broken by a `bug fix'
(in reality an API change) in 1.2.1.)
o optim(method="BFGS") was not reporting reaching `maxit'
iterations in the convergence component of the return value.
o aov() and model.tables() were failing on multistrata models with
excessively long Error formula. (PR#1315)
o Transparent backgrounds on png() devices on Unix-alikes had
been broken during the driver changes just prior to 1.4.0.
(They worked correctly on Windows.)
o demo(is.things) didn't work properly when the methods package was
attached.
o match(), unique() and duplicated() were not declaring all NaNs to be
equal, yet not always distinguishing NA and NaN. This was
very rare except for data imported as binary numbers.
o The error handler recover() protects itself against errors in
dump.frames and uses a new utility, limitedLabels, to generate
names for the dump that don't inadvertently blow the limit on
symbol length. (TODO: either fix dump.frames accordingly or
remove the limit--say by truncating very long symbols?)
o se.contrasts() works more reliably with multistratum models,
and its help page has an example.
o summary.lm() was not returning r.squared nor adj.r.squared for
intercept-only models, but summary.lm.null() was returning
r.squared but not adj.r.squared. Now both are always
returned. Neither returned f.statistic, and that is now
documented.
o Subsetting of matrices of mode list (or other non-atomic
modes) was not implemented and gave incorrect results without
warning. (PR#1329)
Under some circumstances subsetting of a character matrix
inserted NA in the wrong place.
o abs() was not being treated as member of the Math group
generic function, so e.g. its method for data frames was not
being used.
o set.seed(seed, "default") was not using the `seed' value (only
for kind = "default").
o logLik.lm() now uses "df = p + 1" again (`+ sigma'!).
o logLik.glm() was incorrect for families with estimated dispersion.
o Added strptime() workaround for those platforms (such as
Solaris) that returned missing components as 0. Missing
days are now detected, but missing years will still
be interpreted as 1900 on such platforms.
o Inheritance in formal classes (the methods package) works
breadth-first as intuition would expect.
o The new() function in package `methods' works better (maybe even
correctly?) for the various combinations of super-classes and
prototypes that can be supplied as unnamed arguments.
o Internal code allowed one more connection to be allocated than
the table size, leading to segfaults. (PR#1333)
o If a user asks to open a connection when it is created and
it cannot be opened, the connection is destroyed before returning
from the creation call. (related to PR#1333)
o Sys.putenv() was not using permanent storage. (PR#1371)
o La.svd() was not coercing integer matrices. (PR#1363)
o deriv(3) now reports correctly the function it cannot find
the derivatives table.
o The GNOME user interface was over-enthusiastic about setting
locale information. Now only LC_CTYPE, LC_COLLATE and LC_TIME
are determined by the user's environment variables (PR#1321)
o In X11, locator() would sound the bell even if "xset b off"
had been set.
o merge() could be confused by inconsistent use of as.character()
giving leading spaces.
o [pqr]binom() no longer silently round the `size' argument,
but return NaN (as dbinom() does). (PR#1377)
o Fixed socket writing code to block until all data is written.
Fixed socket reading code to properly handle long reads and reads
with part of the data in the connection buffer.
o Allow sockets to be opened in binary mode with both open="ab" and
open="a+b".
o levels<-.factor() was using incorrectly list values longer than
the number of levels (PR#1394), and incorrectly documented
that a character value could not be longer than the existing
levels.
o The pdf() device was running out of objects before the
documented 500 page limit. Now there is no limit.
o legend() did not deal correctly with `angle' arguments. (PR#1404)
o sum() tried to give an integer result for integer arguments,
but (PR#1408)
- this was not documented
- it sometimes warned on overflow, sometimes not
- it was order-dependent for a mixture of integer and numeric args.
o mean() gave (numeric) NA if integer overflow occurred in sum(),
but now always works internally with numeric (or complex) numbers.
o sort.list() and order() were treating NA_STRING as "NA".
o sort.list(na.last = NA) was not implemented.
o seq.default() was returning only one element for a relative
range of less than about 1e-8, which was excessively conservative.
(PR#1416)
o tsp(x) <- NULL now also works after library(methods).
o persp(shade=) was not working correctly with the default
col=NULL if this was transparent. (PR#1419)
o min/max(complex(0)) was returning a random value.
o range() gave c(1, 1).
o range(numeric(0)) is now c(Inf, -Inf), as it was documented to be.
o print.ts() was occasionally making rounding errors in the labels
for multiple calendar time series.
o Rdconv was not handling nested \describe{} constructs when
converting to HTML (PR#1257) and not fixing up mal-formed
\item fields in \describe{} when converting to text (PR#1330).
o filled.contour() was not checking consistency of x, y, z.
(PR#1432)
o persp.default() no longer crashes with non-character labels.
(PR#1431)
o fft() gave incorrect answers for input sizes 392, 588, 968, 980 ....
(PR#1429)
o det(method = "qr") gave incorrect results for numerically
singular matrices. (PR#1244)
o barplot() now allows the user to control `xpd'. (PR#1088, 1398)
o library() (with no arguments) no longer fails on empty TITLE files.
o glm() was failing if both offset() and start were specified. (PR#1421)
o glm() might have gotten confused if both step-shortening and
pivoting had occurred (PR#1331). Step-halving to avoid the
boundary of feasible values was not working.
o Internal representation of logical values was not being
treated consistently. (Related to PR#1439)
o The c() function sometimes inserted garbage in the name vector
for some types of objects, e.g. names(c(ls, a=1)).
o Fixed bug in `$' that could cause mutations on assignment (PR#1450).
o Some X servers displayed random bytes in the window title of
graphics windows (PR#1451)
o The X11 data editor would segfault if closed with window manager
controls (PR#1453)
o Interrupt of Sys.sleep() on UNIX no longer causes subsequent
Sys.sleep() calls to segfault due to infinite recusion.
o Eliminated a race condition that could cause segfaults when a SIGINT
was received while handling an earlier SIGINT.
o rect(lty = "blank") was incorrectly drawing with a dashed line.
o type.convert() was not reporting incorrectly formatted complex
inputs. (PR#1477)
o readChar() was not resetting vmax, so causing memory build-up.
(PR#1483)
**************************************************
* *
* 1.4 SERIES NEWS *
* *
**************************************************
CHANGES IN R VERSION 1.4.1
BUG FIXES
o scan(multi.line = FALSE) now always gives an immediate error
message if a line is incomplete. (As requested in PR#1210)
o read.table() is no longer very slow in processing comments:
moved to C code and fewer lines checked.
o type.convert() could give stack imbalance warnings if used
with as.is = TRUE.
o predict.mlm ignored newdata (PR#1226) and also offsets.
o demo(tkttest) was inadvertently changed in 1.4.0 so that it would
evaluate the requested test, but not display the result.
o stars(scale = TRUE) (the default) now works as documented (and
as S does). Previously it only scaled the maximum to 1. (PR#1230)
o d0 <- data.frame(a = 0); data.matrix(d0[0, 0]) and
data.matrix(d0[, 0]) now work.
o plot(multiple time series, plot.type = "single") was computing
`ylim' from the first series only.
o plot.acf() has a new `xpd = par("xpd")' argument which by default
*does* clipping (of the horizontal lines) as desired (xpd = NA was
used before, erronously in most cases).
o predict(smooth.spline(.), deriv = 1) now works.
o identify() failed when x is a structure/matrix. (PR#1238)
o getMethod() returns NULL when optional=TRUE as promised in the
documentation.
o setMethod() allows "..." to be one of the arguments omitted in
the method definition (but so far no check for ... being missing)
o Allow round() to work again on very large numbers (introduced
in fixing PR#1138). (PR#1254)
o Rinternals.h is now accepted by a C++ compiler.
o type.convert() was failing to detect integer overflow.
o piechart() was defaulting to foreground colour (black) fills
rather than background (as used in 1.3.1 and earlier). Now
background is used, but be aware that as from 1.4.0 this may
be transparent.
o La.eigen(*, only.values=TRUE) does not segfault anymore in one
branch (PR#1262).
o cut() now produces correct default labels even when
include.lowest = TRUE (PR#1263).
o reformulate() works properly with a response.
o cmdscale(*, k = 1) now works properly.
o Options by = "month" and "year" to seq.POSIXt() will always
take account of changes to/from daylight savings time: this
was not working on some platforms.
o glm.fit.null() now accepts all the arguments of glm.fit() (it
could be called from glm.fit with arguments it did not
accept), and is now documented.
o cov.wt(cbind(1), cor = TRUE) now works.
o predict(glm.object, se.fit = TRUE) was failing if the fit
involved an offset.
o detach() on package:base would crash R. (PR#1271)
o print or summary on a manova() object with no terms, no names on
the response and intercept = FALSE (which is not sensible)
would give an error.
o seek() on file connections was ignoring the `origin' argument.
o Fixed new environment handling in library() to avoid forcing
promises created by delay()
o arima0() could leak memory: now released via on.exit().
o qr.coef(qr,*) now keeps the names of qr$qr.
o read.00Index() no longer fails on data indexes not generated by
Rdindex (PR#1274).
CHANGES IN R VERSION 1.4.0
USER-VISIBLE CHANGES
[This is a new section to highlight changes in behaviour, which
may be given in more detail in the following sections.
Many bug fixes are also user-visible changes.]
o The default save format has been changed, so saved workspaces
and objects cannot (by default) be read in earlier versions of R.
o The number of bins selected by default in a histogram uses
the correct version of Sturges' formula and will usually be
one larger.
o data.frame() no longer converts logical arguments to factors
(following S4 rather than S3).
o read.table() has new arguments `nrows' and `colClasses'. If the
latter is NA (the default), conversion is attempted to
logical, integer, numeric or complex, not just to numeric.
o model.matrix() treats logical variables as a factors with
levels c(FALSE, TRUE) (rather than 0-1 valued numerical
variables). This makes R compatible with all S versions.
o Transparency is now supported on most graphics devices.
This means that using par("bg"), for example in legend(), will
by default give a transparent rather than opaque background.
o [dpqr]gamma now has third argument `rate' for S-compatibility
(and for compatibility with exponentials). Calls which use
positional matching may need to be altered.
o The meaning of spar = 0 in smooth.spline() has changed.
o substring() and substring()<- do nothing silently on a
character vector of length 0, rather than generating an
error. This is consistent with other functions and with S.
o For compatibility with S4, any arithmetic operation using a
zero-length vector has a zero-length result. (This was
already true for logical operations, which were compatible
with S4 rather than S3.)
o undoc() and codoc() have been moved to the new package `tools'.
o The name of the site profile now defaults to
`R_HOME/etc/Rprofile.site'.
o The startup process for setting environment variables now first
searches for a site environment file (given by the environment
variable `R_ENVIRON' if set or `R_HOME/etc/Renviron.site' if
not), *and* then for a user `.Renviron' file in the current or
the user's home directory.
o Former stars(*, colors = v) must now be stars(*, col.segments = v).
o The default methods for La.svd and La.eigen have changed and
so there may be sign changes in singular/eigen vectors,
including in cancor, cmdscale, factanal, princomp and varimax.
NEW FEATURES
o Transparency is now supported on most graphics devices.
Internally colors include an alpha channel for opacity, but at
present there is only visible support for transparent/opaque.
The new color "transparent" (or NA or "NA") is transparent,
and is the default background color for most devices. Those
devices (postscript, XFig, PDF, Windows metafile and printer)
that previously treated bg = "white" as transparent now have
"transparent" as the default and will actually print "white".
(NB: you may have bg = "white" saved in .Postscript.options in
your workspace.)
o A package `methods' has been added, containing formal classes
and methods ("S4" methods), implementing the description in
the book "Programming with Data". See "?Methods" and the
references there for more information.
- In support of this, the "@" operator has been added to the
grammar.
- Method dispatch for formal methods (the standardGeneric
function), is now a primitive. Aside from efficiency issues,
this allows S3-style generics to also have formal methods
(not really recommended in the long run, but it should at
least work). The C-level dispatch is now implemented for
primitives that use either DispatchGroup or DispatchOrEval
internally.
- A version of the function "plot" in the methods package has
arguments "x" and "y", to allow methods for either or both.
See "?setMethod" for examples of such methods.
- The methods package now uses C-level code (from within
DispatchOrEval) to dispatch any methods defined for
primitive functions. As with S3-style methods, methods can
only be defined if the first argument satisfies is.object(x)
(not strictly required for formal methods, but imposed for
now for simplicity and efficiency).
o Changes to the tcltk package:
- New interface for accessing Tcl variables, effectively
making the R representations lexically scoped. The old form
is being deprecated.
- Callbacks can now be expressions, with slightly unorthodox
semantics. In particular this allows bindings to contain
"break" expressions (this is necessary to bind code to
e.g. Alt-x without having the key combination also insert an
"x" in a text widget.)
- A bunch of file handling and dialog functions (previously
only available via tkcmd) have been added
o The "?" operator is now an actual function. It can be used
(as always) as a unary operator (?plot) and the grammar now
allows it as a binary operator, planned to allow
differentiating documentation on the same name but different
type (class?matrix, for example). So far, no such
documentation exists.
o New methods AIC.default() and logLik.glm(), also fixing
AIC(<glm obj>).
o axis.POSIXct() allows the label date/times to be specified
via the new `at' argument.
o arrows() now allows length = 0 (and draws no arrowheads).
o Modifications to the access functions for more consistency with S:
arguments `name', `pos' and `where' are more flexible in
assign(), exists(), get(), ls(), objects(), remove() and rm().
o Three new primitive functions have been added to base:
dataClass(), objWithClass(), and as.environment(). The first two
are support routines for class() and class<-() in package
methods. The third replaces pos.to.env() in the functions get(),
exists(), and friends.
o barplot() now respects an inline `cex.axis' argument and has a
separate `cex.names' argument so names and the numeric axis
labels can be scaled separately. Also, graphics parameters
intended for axis() such as `las' can now be used.
o Shading by lines added to functions barplot(), hist(),
legend(), piechart(), polygon() and rect().
o bxp() has a show.names argument allowing labels on a single
boxplot; it and hence boxplot() now makes use of pch, cex, and bg
for outlier points().
bxp() and boxplot() also have an argument `outline' to suppress
outlier drawing {S-PLUS compatibly}.
o New capabilities() options "GNOME" and "IEEE754".
o New function casefold(), a wrapper for tolower/toupper
provided for compatibility with S-PLUS.
o contour() is now generic.
o cor.test() in package ctest now also gives an asymptotic
confidence interval for the Pearson product moment correlation
coefficient.
o data(), demo() and library() now also return the information
about available data sets, demos or packages. Similarly,
help.search() returns its results.
o density() allows `bw' or `width' to specify a rule to choose the
bandwidth, and rules "nrd0" (the previous default), "nrd",
"ucv", "bcv", "SJ-ste" and "SJ-dpi" are supplied (based on
functions in package MASS).
o df.residual() now has a default method, used for classes
"lm" and "glm".
o New argument `cacheOK' to download.file() to request cache
flushing.
All methods for download.file() do tilde-expansion on the path
name.
The internal download.file() etc now allow URLs of the form
ftp://user@foo.bar/ and ftp://user:pass@foo.bar/
o duplicated() and unique() are now generic functions with
methods for data frames (as well as atomic vectors).
o factanal() and princomp() use napredict() on their scores, so
na.action = na.exclude is supported.
o Function getNativeSymbolInfo() returns details about a native
routine, potentially including its address, the library in
which it is located, the interface by which it can be called
and the number of parameters.
o Functions such as help() which perform library or package index
searches now use NULL as default for their `lib.loc' argument so
that missingness can be propagated more easily. The default
corresponds to all currently known libraries as before.
o Added function file.rename().
o hist.default() allows `breaks' to specify a rule to choose the
number of classes, and rules "Sturges" (the previous default),
"Scott" and "FD" (Freedman-Diaconis) are supplied (based on
package MASS).
o Function identical(), a fast and reliable way to test for exact
equality of two objects.
o New generic function is.na<-(), from S4. This is by default
equivalent to x[value] <- NA but may differ, e.g. for factors
where "NA" is a level.
o is.xxx reached through do_is are now generic.
o La.eigen() and La.svd() have new default methods to use later
(and often much faster) LAPACK routines. The difference
is most noticeable on systems with optimized BLAS libraries.
o length() is now generic.
o New function .libPaths() for getting or setting the paths to the
library trees R knows about. This is still stored in .lib.loc,
which however should no longer be accessed directly.
o Using lm/glm/... with `data' a matrix rather than a data frame
now gives a specific error message.
o loess(), lqs(), nls() and ppr() use the standard NA-handling
and so support na.action = na.exclude.
o mahalanobis() now has a `tol' argument to be passed to solve().
o mean() has `data frame' method applying mean column-by-column.
When applied to non-numeric data mean() now returns NA rather
than a confusing error message (for compatibility with S4).
Logicals are still coerced to numeric.
o The formula interface to mosaicplot() now allows a contingency
table as data argument.
o new.env() is now internal and allows you to set hashing. Also,
parent.env() and parent.env<-() are included to provide direct
access to setting and retrieving environments.
o Function nsl() to look up IP addresses of hosts: intended as
a way to test for internet connectivity.
o Ops(), cbind(), diff() and na.omit() methods for time series
objects moved from package ts to package base.
o New option `download.file.method' can be used to set the
default method for download.file() and functions which use it
such as update.packages().
o order() and sort.list() now implement na.last = FALSE, NA.
o Started work on new package management system: packageStatus()
and friends.
o page() has a new `method' argument allowing `method = print'.
o png(), jpeg() and bmp() devices now have a `bg' argument to
set the background color: useful to set "transparent" on png().
o Changes to the postscript() device:
- The symbol font can now be set on a postscript() device, and
support has been added for using Computer Modern type-1
fonts (including for symbols). (Contributed by Brian D'Urso.)
- There is now support for URW font families: this will give
access to more characters and more appropriate metrics on
PostScript devices using URW fonts (such as ghostscript).
- %%IncludeResource comments have been added to the output.
(Contributed by Brian D'Urso.)
o predict.ppr() now predicts on `newdata' containing NAs.
o princomp() now has a formula interface.
o readChar() now returns what is available if fewer characters
than requested are on the file.
o readline() allows up to 256 chars for the prompt.
o read.table(), scan() and count.fields() have a new argument
`comment.char', default `#', that can be used to start
comments on a line.
o New function reg.finalizer() to provide R interface to
finalization.
o reshape() extends reshapeLong, reshapeWide, which are deprecated.
o rle() now returns a classed object, has a print method and
an inverse.
o Changes to save() and friends:
- save() now takes an envir argument for specifying where
items to be saved are to be found.
- A new default format for saved workspaces has been
introduced. This format provides support for some new
internal data types, produces smaller save files when saving
code, and provides a basis for a more flexible serialization
mechanism.
- Modified `save' internals to improve performance when saving
large collections of code.
- save() and save.image() now take a `version' argument to
specify the workspace file-format version to use. The
version used from R 0.99.0 to 1.3.1 is version 1. The new
default format is version 2. load() can read a version 2
saved workspace if it is compressed.
- save() and save.image() now take a `compress' argument to
specify that the saved image should be written using the zlib
compression facilities.
- save.image() now takes an argument `ascii'.
- save.image() now takes an argument `safe'. If TRUE, the
default, a temporary file is used for creating the saved
workspace. The temporary file is renamed if the save
succeeds. This preserves an existing workspace if the save
fails, but at the cost of using extra disk space during the
save.
- save.image() default arguments can be specified in the
`save.image.defaults' option. These specifications are used
when save.image() is called from q() or GUI analogs.
o scan() allows unlimited (by R) lengths of input lines, instead
of a limit of 8190 chars.
o smooth.spline() has a new `control.spar' argument and returns
`lambda' besides `spar'. spar <= 0 is now valid and allows
to go more closely towards interpolation (lambda -> 0) than before.
This also fixes smooth.spline() behavior for "df ~= n - 2". Better
error messages in several situations.
Note that spar = 0 is no longer the default and no longer entails
cross-validation.
o stars() has been enhanced; new `mar' argument uses smaller
mar(gins) by default; further `nrow and `ncol' as S-PLUS,
`frame.plot', `flip.labels', `lty' and explicit `main', `sub',
`xlab' and `ylab'. Note that `colors' has been replaced by
`col.segments' and there's a new `col.stars'.
stars() now returns the locations invisibly.
o step() is now closer to stepAIC() and so handles a wider range
of objects (but stepAIC [in MASS] is still more powerful).
o symbols() now has automatic xlab and ylab and a main argument
which eliminates an incorrect warning. It better checks wrongly
scaled arguments.
o Sys.setlocale() now issues a warning if it fails.
o An enhanced function type.convert() is now a documented
function, rather than just internal to read.table().
o warning() allows multiple arguments, following S4's style.
o New function with() for evaluating expressions in environments
constructed from data.
o Unix x11() devices can now have a canvas color set, which can
help to distinguish plotting "white" from plotting
"transparent".
o On Unix, X11(), png() and jpeg() now give informative warnings
if they fail to open the device.
o The startup processing now interprets escapes in the values of
environment variables set in R_HOME/etc/Renviron in a similar
way to most shells.
o The operator "=" is now allowed as an assignment
operator in the grammar, for consistency with other languages,
including recent versions of S-PLUS. Assignments with "=" are
basically allowed only at top-level and in braced or
parenthesized expressions, to make famous errors such as
"if(x=0) 1 else 2" illegal in the grammar.
(There is a plan to gradually eliminate the underscore as an
assignment in future versions of R.)
o Finalizers can be registered to be run on system exit for both
reachable and unreachable objects.
o integer addition, subtraction, and multiplication now return NA's
on overflow and issue a warning.
o Printing factors with both level "NA" and missing values
uses `<NA>' for the missing values to distinguish them.
o Added an experimental interface for locking environments and
individual bindings. Also added support for "active bindings"
that link a variable to a function (useful for example for linking
an R variable to an internal C global).
o GNOME interface now has separate colours for input and output
text (like the windows GUI). These can be modified via the
properties dialogue.
o Output from the GNOME console is block buffered for increased
speed
o The GNOME console inherits standard emacs-style keyboard
shortcuts from the GtkText widget for cursor motion, editing
and selection. These have been modified to allow for the prompt
at the beginning of the command line.
o One can register R functions and C routines to be called at the
end of the successful evaluation of each top-level expression,
for example to perform auto-saves, update displays, etc. See
addTaskCallback() and taskCallbackManager(). See
http://developer.r-project.org/TaskHandlers.pdf.
DEPRECATED & DEFUNCT
o .Alias has been removed from all R sources and deprecated.
o reshapeLong(), reshapeWide() are deprecated in favour of reshape().
o Previously deprecated functions read.table.url(), scan.url(),
source.url(), httpclient() and parse.dcf() are defunct.
Method "socket" for download.file() no longer exists.
DOCUMENTATION CHANGES
o `Writing R Extensions' has a new chapter on generic/method
functions.
UTILITIES
o New package `tools' for package development and administration
tools, containing the QC tools checkFF(), codoc() and undoc()
previously in package base, as well as the following new ones:
- checkAssignFuns() for checking whether the final argument of
assignment functions in a package is named `value'.
- checkDocArgs() for checking whether all arguments shown in
\usage of Rd files are documented in the corresponding
\arguments.
- checkMethods() for checking whether all methods defined in a
package have all arguments of their generic.
- checkTnF() for finding expressions containing the symbols `T'
and `F'.
o R CMD Rd2dvi has more convenient defaults for its output file.
o R CMD check now also fully checks the Depends field in the
package DESCRIPTION file. It also tests for syntax errors in
the R code, whether all methods in the code have all arguments
of the corresponding generic, for arguments shown in \usage but
not documented in \arguments, and whether assignment functions
have their final argument named `value'.
C-LEVEL FACILITIES
o arraySubscript and vectorSubscript are now available to package
users. All "array-like" packages can use a standard method for
calculating subscripts.
o The C routine type2symbol, similar to type2str, returns a symbol
corresponding to the type supplied as an argument.
o The macro SHLIB_EXT now includes `.', e.g. ".so" or ".dll",
since the Mac uses "Lib" without a `.'.
o New Fortran entry points rwarn() and rexit() for warnings and
error exits from compiled Fortran code.
o A new serialization mechanism is available that can be used to
serialize R objects to connections or to strings. This
mechanism is used for the version 2 save format. For now,
only an internal C interface is available.
o R_tryEval() added for evaluating expressions from C code with
errors handled but guaranteed to return to the calling C
routine. This is used in embedding R in other applications and
languages.
o Support for attach()'ing user-defined tables of variables
is available and accessed via the RObjectTables package
currently at http://www.omegahat.org/RObjectTables.
BUG FIXES
o Fixed share/perl/massage-examples.pl to detect instances of
par() at the very start of a line.
o Fixed Pearson residuals for glms with non-canonical
link.(PR#1123). Fixed them again for weights (PR#1175).
o Fixed an inconsistency in the evaluation context for on.exit
expressions between explicit calls to `return' and falling off
the end returns.
o The code in model.matrix.default() handling contrasts was
assuming a response was present, and so without a response was
failing to record the contrasts for the first variable if it
was a factor.
o diffinv() could get the time base wrong in some cases.
o file.append() was opening all files in text mode: mattered
on Windows and classic Macintosh. (PR#1085)
o f[] <- g now works for factor f.
o substr<-() was misbehaving if the replacement was too short.
o The version of `packages.html' generated when building R or
installing packages had an incorrect link to the style sheet.
The version used by help.start() was correct. (PR#1090)
o rowsum() now gives character (not factor codes) as rownames.
(PR#1092)
o plot.POSIX[cl]t now respect the `xaxt' parameter.
o It is now possible to predict from an intercept-only model:
previously model.matrix.default() objected to a 0-column
model frame.
o c.POSIXct was not setting the right classes in 1.3.x.
o cor(*, use = "all.obs") <= 1 is now guaranteed which ensures
that sqrt(1 - r^2) is always ok in cor.test(). (PR#1099)
o anova.glm() had a missing drop=FALSE and so failed for some
intercept-less models.
o predict.arima0() now accepts vector as well as matrix
`newxreg' arguments.
o cbind(d,f) now works for 0-column dataframes. This fixes PR#1102.
o plot(ts(0:99), log = "y") now works
o method "gnudoit" of bug.report() was incorrectly documented as
"gnuclient" (PR#1108)
o saving with ascii=TRUE mangled backslashes. (PR#1115)
o frac(,) {and others} now adds a gap appropriately. (PR#1101)
o logLik.lm() now uses the correct "df" (nlme legacy code).
o closeAllConnections() works again, and closes all sink() diversions.
o sink(type="message") works again.
o sink.number was (accidentally) returning the result invisibly.
o as.POSIXct("NA") (or ..lt) now work; hence, merge(*, all=TRUE) now
works with dataframes containing POSIXt date columns.
o integer(2^30+1) and similar ones do not segfault anymore but duly
report allocation errors.
o seq(0, 0, 1) now works (PR#1133).
o reshapeWide() got it wrong if the "i" factor was not sorted (the
function is now deprecated since reshape() is there, but the bug
still needed fixing...)
o PR#757 was fixed incorrectly, causing improper subsetting of
pch etc. in plot.formula().
o library() no longer removes environments of functions that are
not defined in the top-level package scope. Also, packages
loaded by require() when sourcing package code are now visible
in the remaining source evaluations.
o names(d) <- v now works (again) for "dist" objects d. (PR#1129)
o Workarounds for problems with incompletely specified date-times
in strptime() which were seen only on glibc-based systems
(PR#1155).
o promax() was returning the wrong rotation matrix. (PR#1146)
o The [pqr]signrank and [pqr]wilcox functions failed to check that
memory has been allocated (PR#1149), and had (often large)
memory leaks if interrupted. They now can be interrupted on
Windows and Mac OS and don't leak memory.
o range(numeric(0)) is now c(NA, NA) not NA.
o round(x, digits) for digits <= 0 always gives an integral
answer. Previously it might not due to rounding errors in
fround. (PR#1138/9)
o Several memory leaks on interrupting functions have been
circumvented. Functions lqs() and mve() can now be
interrupted on Windows and Mac OS.
o image() was finding incorrect breakpoints from
irregularly-spaced midpoints. (PR#1160)
o Use fuzz in the 2-sample Kolmogorov-Smirnov test in package
ctest to avoid rounding errors (PR#1004, follow-up).
o Use exact Hodges-Lehmann estimators for the Wilcoxon tests in
package ctest (PR#1150).
o Arithmetic which coerced types could lose the class
information, for example `table - real' had a class attribute
but was not treated as a classed object.
o Internal ftp client could crash R under error conditions such
as failing to parse the URL.
o Internal clipping code for circles could attempt to allocate
a vector of length -1 (related to PR#1174)
o The hash function used internally in match(), unique() and
duplicated() was very inefficient for integers stored as
numeric, on little-endian chips. It was failing to hash the
imaginary part of complex numbers.
o fifo() no longer tries to truncate on opening in modes
including "w". (Caused the fifo example to fail on HP-UX.)
o Output over 1024 characters was discarded from the GNOME
console.
o rug() now correctly warns about clipped values also for logarithmic
axes and has a `quiet' argument for suppressing these (PR#1188).
o model.matrix.default was not handling correctly contrasts.arg
which did not supply a full set of contrasts (PR#1187).
o The `width' argument of density() was only compatible with S
for a Gaussian kernel: now it is compatible in all cases.
o The rbinom() C code had a transcription error from the original
Fortran which led to a small deviation from the intended
distribution. (PR#1190)
o pt(t, , ncp=0) was wrong if t was +/-Inf.
o Subsetting grouping factors gave incorrect degrees of freedom
for some tests in package ctests. (PR#1124)
o writeBin() had a memory leak.
o qbeta(0.25, 0.143891, 0.05) was (incorrectly) 3e-308. (PR#1201)
o Fixed alignment problem in ppr.f on Irix. (PR#1002, 1026)
o glm() failed on null binomial models. (PR#1216)
o La.svd() with nu = 0 or nv = 0 could fail as the matrix passed
to DGESVD was not of dimension at least one (it was a vector).
o Rownames in xcoef and ycoef of cancor() were wrong if x or y
was rank-deficient.
o lqs() could give warnings if there was an exact fit. (PR#1184)
o aov() didn't find free-floating variables for Error() terms when
called from inside another function
o write.table() failed if asked to quote a numerical matrix with
no row names. (PR#1219)
o rlnorm( *, *, sd=0) now returns the mean,
rnbinom(*, *, prob=1) gives 0, (PR#1218).
**************************************************
* *
* 1.3 SERIES NEWS *
* *
**************************************************
CHANGES IN R VERSION 1.3.1
NEW FEATURES
o massage-examples is now a Perl script and about 50x faster.
o On Unix(-alike) systems the default pager is now determined
during configuration, and is `less' if available, otherwise
`more' (and not `more -s' as previously).
o configure now tests for strptime functions that fail on inputs
before 1970 (found on Irix). It no longer checks for the SCSL
and SGIMATH libraries on Irix.
o New formula interface to cor.test() in package ctest.
o "NA" is now a valid color name (as NA has been a valid integer
color).
o pairs() function has a new `gap' argument for adjusting the
spacing between panels.
o R CMD check has a new test for unbalanced braces in Rd files.
o readBin() has a new argument `signed' to simplify reading
unsigned 8- and 16-bit integers.
o New capabilities() option "cledit".
o Modified restore code to give clearer error messages in some cases.
BUG FIXES
o Fixed placement of mtext() output (including tick labels)
when text is perpendicular to axis AND axis is logged
(PR#997 and PR#865).
o rect() and arrows() now respond to setting of par(xpd)
o abline() now responds to the setting of par(xpd), including
via the "..." argument (PR#750).
o Using cat() to a gzfile() connection no longer compresses poorly
(at the expense of some latency).
o The `exact' p-values for the two-sided two-sample
Kolmogorov-Smirnov test in 1.3.0 were for the wrong tail.
o In the HTML conversion of .Rd files, \link[foo]{bar} was
ignoring [foo] outside \code{} statements.
o lm.influence(), plot.lm(), influence.measures() and the
related diagnostic measures now handle lm() fits with
na.action=na.exclude.
o Eliminated segmentation fault in while loops without braces
in their bodies.
o barplot did not accept NA heights unless ylim was specified.
o predict.lm() failed with single-column model matrix (PR#1018).
o legend() now also works with 100s of entries (thanks to
M. Schlather).
o A long-standing bug leading to inaccuracy in polyroot() has been
fixed (PR#751)
o A very old bug with eval() not handling a numeric `envir' argument
according to specifications has been fixed. [This in particular
broke ported S-PLUS code that used eval(..., sys.parent())]. Also,
eval() now checks that a numeric `envir' has length one to prevent
accidental passing of matrices instead of data frames.
o The C code underlying nlm(f, *) now also works correctly when f(x)
returns +Inf {nlm() itself *did* work!}.
o pdfcolor.tex is now included in doc/manual, as pdftex seems no
longer to include it.
o Fixed protect bug in save() code that might have been responsible
for occasionally saving corrupted workspaces.
o capabilities("X11") now reports if X11 is available in this
session, thereby giving the correct answer if --gui=none was
specified.
o Rd files with ,, inside \code{} were treating this as a
ligature in LaTeX: now corrected in Rdconv.
o dlopen on Compaq Tru64 was finding the wrong entry points:
worked-around by using different names in the modules.
o plot.mts() allows a type argument again (broken in 1.3.0: PR#1010).
o scan() has a limit of 8190 on the length of char strings, and
now warns if it is exceeded (when the string has always been
truncated).
o par adj now accepts values of integer mode (such as text(adj=0:1)).
o horizontal adj values outside the range [0, 1] are now
supported on devices with canHAdj==1 (Windows devices, xfig).
o xtabs() without a response was ignoring drop.unused.levels=TRUE.
o readLines(ok=FALSE) was not generating an error when it should.
o princomp(covmat=) has been broken.
o Many documentation clean-ups: formerly undocumented arguments,
use of T/F rather than TRUE/FALSE.
o df[] <- foo now works for data frames (PR#1047).
o nargs() was documented incorrectly.
o Using seq.POSIXt(by="2 weeks") was stepping by single weeks
(PR#1046).
o dummy.coef.lm was not handling complex terms like z:I(x).
It now either does or warns and gives NAs (PR#1048).
o predict.mlm() was broken (PR#1049).
o ksmooth (in package modreg) was using points to the left
of the kernel under some circumstances (PR#1050).
o attr(x, "class") <- character(0) was segfaulting. Similar problem
with "comment" attribute also fixed.
o loadings() results from PCA (as well as from factor analysis)
are now printed by print.loadings.
o Using chol() on an non-positive-definite matrix gave an
misleading error message (PR#1061).
o as.character() on a language object was truncating to about 70
characters: the internal limit (from the deparse code) is now the
maximum possible 500.
o X11() device was failing to re-initialize correctly after all
devices were shut down, so the colortype could not be changed
and some systems showed protocol errors. (PR#1065)
o Converting Inf and NaN values by as.character() and reading by
scan() was supported by strtod on some platforms and not
others: these are now handled by R itself. (PR#1072)
o hclust(dist(1)) doesn't loop infinitely but signal an error.
o cutree() can now cut outside heights and does not return
garbage for h >= max(tree$heights) anymore. (PR#1067)
o interaction(...,drop=F) returned an object looking like a
factor, but with storage mode "double", confusing
model.matrix.default (PR#1003)
o splineDesign(*, ord=) and others give better error messages for
wrong `ord' (and have slightly improved documentation).
CHANGES IN R VERSION 1.3.0
NEW FEATURES
o Changes to connections:
- New function url() to read from URLs. file() will also
accept URL specifications, as will all the functions which
use it.
- file connections can now be opened for both reading and writing.
- Anonymous file connections (via file()) are now supported.
- New function gzfile() to read from / write to compressed files.
- New function fifo() for connections to / from fifos (on Unix).
- Text input from file, pipe, fifo, gzfile and url connections
can be read with a user-specified encoding.
- New functions readChar() and writeChar() to read character
strings with known lengths and no terminators, and to write
user-specified lengths from strings.
- sink() now has a stack of output connections, following S4.
- sink() can also be applied to the message stream, to capture
error messages to a connection. Use carefully!
- seek() has a new `origin' argument.
- New function truncate() to truncate a connection open for
writing at the current position.
- Socket connections via function socketConnection().
- The `blocking' argument for file, fifo and socket connections
is now operational.
o Changes to date/time classes and functions:
- Date/time objects now all inherit from class "POSIXt".
- New function difftime() and corresponding class for date/time
differences, and a round() method.
- Subtraction and logical comparison of objects from different
date/time classes is now supported. NB: the format for the
difference of two objects of the same date/time class has
changed, but only for objects generated by this version, not
those generated by earlier ones.
- Methods for cut(), seq(), round() and trunc() for date/time
classes.
- Convenience generic functions weekdays(), months(), quarters()
and julian() with methods for "POSIXt" objects.
o Coercion from real to integer now gives NA for out-of-range
values, rather than the most extreme integer of the same sign.
o The Ansari-Bradley, Bartlett, Fligner-Killeen, Friedman,
Kruskal-Wallis, Mood, Quade, t, and Wilcoxon tests as well as
var.test() in package ctest now have formula interfaces.
o Matrix multiplication functions %*% and crossprod() now use a
level-3 BLAS routine dgemm. When R is linked with the ATLAS
or other enhanced BLAS libraries this can be substantially
faster than the previous code.
o New functions La.eigen() and La.svd() for eigenvector and
singular value decompositions, based on LAPACK. These are
preferred to eigen() and svd() for new projects and can make
use of enhanced BLAS routines such as ATLAS. They are
used in cancor(), cmdscale(), factanal() and princomp()
and this may lead to sign reversals in some of the output of
those functions.
o Provided the Fortran compiler can handle COMPLEX*16, the
following routines now handle complex arguments, based on
LAPACK code.
qr, qr.coef, qr.solve, qr.qy, qr.qty, solve.default, svd, La.svd.
o aperm() uses strides in the internal C code and so is
substantially faster (by Jonathan Rougier).
o The four bessel[IJKY](x,nu) functions are now defined for nu < 0.
o [dpqr]nbinom also accept an alternative parametrization via the
mean and the dispersion parameter (thanks to Ben Bolker).
o Generalised "birthday paradox" functions [pq]birthday.
o boxplot() and bxp() have a new argument `at'
o New function capabilities() to report optional capabilities
such as jpeg, png, tcltk, gzfile and url support.
o New function checkFF() for checking foreign function calls.
o New function col2rgb() for color conversion of names, hex, or
integer.
o coplot() has a new argument `bar.bg' (color of conditioning bars),
gives nicer plots when the conditioners are factors, and allows
factors for x and y (treated almost as if unclass()ed) using new
argument `axlabels'. [original ideas by Thomas Baummann]
o `hessian' argument added to deriv() and its methods. A new function
deriv3() provides identical capabilities to deriv() except that
`hessian' is TRUE by default.
deriv(*, *, func = TRUE) for convenience.
o New dev.interactive() function, useful for setting defaults for
par(ask=*) in multifigure plots.
o dist() in package mva can now handle missing values, and
zeroes in the Canberra distance.
o The default method for download.file() (and functions which use
it such as update.packages()) is now "internal", and uses code
compiled into R.
o eigen() tests for symmetry with a numerical tolerance.
o New function formatDL() for formatting description lists.
o New argument `nsmall' to format.default(), for S-PLUS
compatibility (and used in various packages).
o ?/help() now advertises help.search() if it fails to find a topic.
o image() is now a generic function.
o New function integrate() with S-compatible call.
o New function is.unsorted() the C version of which also speeds up
.Internal(sort()) for sorted input.
o is.loaded() accepts an argument PACKAGE to search within
a specific DLL/shared library.
o Exact p-values are available for the two-sided two-sample
Kolmogorov-Smirnov test.
o lm() now passes `...' to the low level functions for regression
fitting.
o Generic functions logLik() and AIC() moved from packages nls
and nlme to base, as well as their *.lm methods.
o New components in .Machine give the sizes of long, long long and
long double C types (or 0 if they do not exist).
o merge.data.frame() has new arguments, `all[.xy]' and `suffixes',
for S compatibility.
o model.frame() now calls na.action with the terms attribute set
on the data frame (needed to distiguish the response, for
example).
o New generic functions naresid(), napredict() and naprint()
(formerly in packages survival5 and MASS, also used in rpart).
Also na.exclude(), a variant on na.omit() that is handled
differently by naresid() and napredict().
The default, lm and glm methods for fitted, residuals, predict
and weights make use of these.
o New function oneway.test() in package ctest for testing for
equal means in a one-way layout, assuming normality but not
necessarily equal variances.
o options(error) accepts a function, as an alternative to
an expression. (The Blue Book only allows a function; current
S-PLUS a function or an expression.)
o outer() has a speed-up in the default case of a matrix outer
product (by Jonathan Rougier).
o package.skeleton() helps with creating new packages.
o New pdf() graphics driver.
o persp() is now a generic function.
o plot.acf() makes better use of white space for `nser > 2', has
new optional arguments and uses a much better layout when more
than one page of plots is produced.
o plot.mts() has a new argument `panel' providing the same
functionality as in coplot().
o postscript() allows user-specified encoding, with encoding files
supplied for Windows, Mac, Unicode and various others, and with
an appropriate platform-specific default.
o print.htest() can now handle test names that are longer than
one line.
o prompt() improved for data sets, particularly non-dataframes.
o qqnorm() is now a generic function.
o read.fwf() has a new argument `n' for specifying the number of
records (lines) read in.
o read.table() now uses a single pass through the dataset.
o rep() now handles lists (as generic vectors).
o scan() has a new argument `multi.line' for S compatibility,
but the default remains the opposite of S (records can cross
line boundaries by default).
o sort(x) now produces an error when x is not atomic instead of
just returning x.
o split() now allows splitting on a list of factors in which case
their interaction defines the grouping.
o stl() has more optional arguments for fine tuning, a summary()
and an improved plot() method.
o New function strwrap() for formatting character strings into
paragraphs.
o New replacement functions substr<-() and substring<-().
o Dataset swiss now has row names.
o Arguments `pkg' and `lib' of system.file() have been renamed to
`package' and `lib.loc', respectively, to be consistent with
related functions. The old names are deprecated. Argument
`package' must now specify a single package.
o The Wilcoxon and Ansari-Bradley tests now return point
estimators of the location or scale parameter of interest along
with confidence intervals for these.
o New function write.dcf() for writing data in Debian Control File
format. parse.dcf() has been replaced by (much faster) internal
read.dcf().
o Contingency tables created by xtabs() or table() now have a
summary() method.
o Functions httpclient(), read.table.url(), scan.url() and
source.url() are now deprecated, and hence method="socket' in
download.file() is. Use url connections instead: in
particular URLs can be specified for read.table(), scan() and
source().
o Formerly deprecated function getenv() is now defunct.
o Support for package-specific demo scripts (R code). demo() now
has new arguments to specify the location of demos and to allow
for running base demos as part of `make check'.
o If not explicitly given a library tree to install to or remove
from, respectively, R CMD INSTALL and R CMD REMOVE now operate
on the first directory given in `R_LIBS' if this is set and
non-null, and the default library otherwise.
o R CMD INSTALL and package.description() fix some common problems
of DESCRIPTION files (blank lines, ...)
o The INSTALL command for package installation allows a `--save'
option. Using it causes a binary image of the package contents
to be created at install time and loaded when the package is
attached. This saves time, but also uses a more standard way
of source-ing the package. Packages that do more than just
assign object definitions may need to install with `--save'.
Putting a file `install.R' in the package directory makes
`--save' the default behavior. If that file is not empty, its
contents should be R commands executed at the end of loading
the image.
There is also a new command line option `--configure-vals' for
passing variables to the configure script of a package.
o R CMD check now also checks the keyword entries against the list
of standard keywords, for code/documentation mismatches (this
can be turned off by the command line option `--no-codoc'), and
for sufficient file permissions (Unix only). There is a new check
for the correct usage of library.dynam.
It also has a new command line option `--use-gct' to use
`gctorture(TRUE)' when running R code.
o R CMD Rd2dvi has better support for producing reference manuals
for packages and package bundles.
o configure now tests for the versions of jpeg (>= 6b), libpng (>=
1.0.5) and zlib (>= 1.1.3). It no longer checks for the
CXML/DXML BLAS libraries on Alphas.
o Perl scripts now use Cwd::cwd() in place of Cwd::getcwd(), as
cwd() can be much faster.
o R::Dcf.pm can now also handle files with more than one record
and checks (a little bit) for continuation lines without leading
whitespace.
o New manual `R Installation and Administration' with fuller
details on the installation process: file `INSTALL' is now a
brief introduction referencing that manual.
o New keyword `internal' which can be used to hide objects that
are not part of the API from indices like the alphabetical lists
in the HTML help system.
o Under Unix, shlib modules for add-on packages are now linked
against R as a shared library (`libR') if this exists. (This
allows for improved embedding of R into other applications.)
o New mechanism for explicitly registering native routines in a
DLL/shared library accessible via .C(), .Call(), .Fortran() and
.External(). This is potentially more robust than the existing
dynamic lookup, since it checks the number of arguments, type of
the routine.
o New mechanism allowing registration of C routines for converting
R objects to C pointers in .C() calls. Useful for references to
data in other languages and libraries (e.g. C and hdf5).
o The internal ftp/http access code maintains the event loop, so
you can download whilst running tcltk or Rggobi, say. It can
be hooked into package XML too.
BUG FIXES
o boxplot.stats() now returns the correct `n' component in the case of
NAs. This also affects `conf', the notch length (PR#967).
o the "coef = 0" fix (PR#917) to boxplot.stats() broke
boxplot.stats(do.out = FALSE).
o curve(* , add = FALSE) now works correctly again if used when
par("xlog") is true.
o Printing a dataframe with a column called "row.names" or
"check.names" omitted the column.
o data.frame(a=1, b=2)[1, -(1:2)] now works, giving an empty
data frame. as.matrix(df), deparse(), dput() and str() now work
for empty data frames.
o dbeta() could return zero erroneously on some platforms where
roundoff makes e.g. 1.3 - 1 > (1.3 + 1) - 2 (Solaris and HP-UX
were affected). (PR#970)
o pointer protection in deriv() (PR#953)
o expand.data.frame() didn't interpret its subset= argument in
the data frame. (PR#979 et al., fix from Greg Warnes)
o format() on character arrays was losing the dimensions.
o hist.default() was ignoring its `probability' argument for
equi-spaced breaks.
o Occasionally insane results of is.nan(NULL), is.na(NULL) (PR#952)
o ks.test() in package ctest now had the one-sided alternatives in
the one-sample case reversed (PR#934).
o ls.str() and lsf.str() now work better with pos > 1, and are
correctly documented (PR#899).
o plot(1:2, xaxs = "i") now gives both "1.0" and "2.0" x-axis labels.
o promax() was not using its `m' argument (m=4 was always used).
o qr.X() was ignoring pivoting (which happens only in
rank-deficient cases).
o sign of Pearson residuals was wrong for reciprocal link (PR#862)
o The algorithm for determining starting estimates in the SSfpl
self-starting model in the nls package was changed following a
suggestion by Phillipe Grosjean <phgrosje@ulb.ac.be>
o svd(x)$v was not a matrix when x had only 1 row (PR#963).
o symnum(x) behaves more reasonably for zero length or non-numeric x.
o The implementation of sys.function() did not work when the
current function was already a function (e.g., a closure).
o tapply() had "..." argument after simplify=, which made it
incompatible with S when passing additional unnamed arguments to FUN.
o use formula environments in xy.coords() (PR#932)
o Unused entry points in `src/appl/fortran.c' and `Fortran.h'
have been removed.
o Unused directory `src/f2clib' and header `src/include/R_ext/f2c.h'
have been removed.
o The documentation and parts of the parse/deparse mechanism
indicated that there was an operator `%'. Corrected (PR#925).
o Fixed some cases where the deparser gave code that threw a
syntax error when parsed.
o Using a pushback with more than two lines at a time could crash.
o Eliminate or warn on use of .Last.value in help examples, since
.Last.value is only set from top-level expressions (and was
incorrectly documented).
o asInteger was ignoring integer overflow (PR#929 and others).
o approxfun(*, ties = <fun>) could return garbage when there were ties;
ties = "ordered" was incorrect--also for approx()-- when there was
a tie at the very right.
**************************************************
* *
* 1.2 SERIES NEWS *
* *
**************************************************
CHANGES IN R VERSION 1.2.3
NEW FEATURES
o Support for configuration and building the Unix version of R
under Mac OS X. (The `classic' Macintosh port is `Carbonized'
and also runs under that OS.)
o dotchart() and stripchart() become the preferred names for
dotplot() and stripplot(), respectively. The old names are now
deprecated.
o Functions in package ctest now consistently use +/-Inf rather
than NA for one-sided confidence intervals.
BUG FIXES
o `Writing R Extensions' incorrectly described an entry point
`fmod' which was not included in the R binary on most systems.
The entry point has been removed, to avoid any confusion with
the standard C entry point of the same name.
o Printing of kernels in package ts was unreliable: the internal
representation was correct.
o A problem with "..." in substitutions has been fixed (PR#860).
o Various strangeness with match.call() and "..." has been fixed
(PR#813).
o sys.function() could return an unevaluated promise, messing up
formals() and match.arg() (PR#872)
o Deparsing or dumping attributes with non-standard names was
not quoting the name (PR#871).
o We now use match.fun() in tapply() so that it won't get trapped
by non-functions masking FUN.
o The `nmax' argument in scan(what=list(...), nmax=300) was
counting blank lines, although they were said to be ignored.
This affected using read.table on files with blank lines in
1.2.2, and using `n' with `what' a list.
o as.numeric(), as.integer(), as.complex() returned zero on
completely blank strings. Now they return NA. (PR#870)
o Overflow in deparse() in terms(formula) with very long left-hand
side fixed. (PR#873)
o lowess(c(1:3, 7:5)) now should give the same on different platforms,
since now in the C code (int)(f*n + 1e-7) is used.
o curve(*, add = TRUE) now works properly with active log scales.
o rt() could give different results on different platforms as
the order of evaluation of calls to random numbers was not
fully defined. This affected the Mac port.
o ppr() inside nested calls sometimes failed to find objects
due to a typo in the eval call in ppr.formula.
o qchisq(0.025, 31, ncp=1, lower.tail=FALSE) now works. (PR#875)
o dchisq with integer x, df and ncp sometimes gave incorrect
results on i686 Linux.
o Cancelling a quit caused quit() not to ask next time it was called.
o Some complicated operations with "..." didn't work.
o Missingness was not correctly propagated in some cases.
o eigen() segfaulted on 0-dimensional matrices.
o nls( ~ rhs, ..) now works (formula with empty left hand side).
o The fuzz added in hist() for 1.2.2 broke the logic testing for
equidistant breakpoints.
o Calls to replacement functions ("f<-") lost argument names
(PR#888).
o is.na() and is.nan() gave random results on lists containing
zero-length objects.
o cor(), cov() and var() gave a result on a zero-length argument
(now an error). cov(x, NULL) and cor(x, NULL) are now errors
if x is a vector. (PR#883).
o ?smooth.spline now properly describes `spar' which is *not*
lambda. smooth.spline(1:20, spar = 50) gives an error instead
of silent nonsense. print.smooth.spline() now makes use of a
digits argument.
o Confidence intervals for wilcox.test() had the samples reversed
in the two-sided case (PR#895), and sometimes got continuity
correction wrong (PR#896).
o Using out-of-range font values in text() on a postscript()
device on Windows could crash. .ps.prolog was incorrectly
named in some of the documentation. (PR#914)
o Warning messages of > 8191 chars could crash R (PR#902), as
could errors. Now they are truncated to 8191 chars on
machines which have vsnprintf (almost all).
o range() now works properly for date-time objects.
o contour() could loop infinitely (PR#897).
o R-lang manual had precedence of %% wrong (PR#879).
o try() constructs lost protection of R_alloc'ed memory (PR#877).
o Documented that as.numeric() dispatches to as.double.foo methods
(PR#918.1).
o httpclient() (and the "socket" method of download.file) skipped ^V
rather than ^Z in input (if drop.ctrl.z = TRUE, the default).
o boxplot(*, range = 0) and boxplot.stats(*, coef = 0) now
don't return outliers anymore (PR#917).
o segmentation fault with tmp[[1,]] (PR#904)
o incorrect "..." handling in plot.factor (PR#830)
CHANGES IN R VERSION 1.2.2
NEW FEATURES
o The Macintosh port becomes a full member of the R family and its
sources are incorporated as from this release.
See `src/macintosh/INSTALL' for how that port is built.
o The API header files and export files `R.exp' are released under
LGPL rather than GPL to allow dynamically loaded code to be
distributed under licences other than GPL.
o postscript() and xfig() devices now make use of genuine Adobe
afm files, and warn if characters are used in string width or
height calculations that are not in the afm files.
o Configure now uses a much expanded search list for finding a
FORTRAN 77 compiler, and no longer disallows wrapper scripts for
this compiler.
o New Rd markup \method{GENERIC}{CLASS} for indicating the usage
of methods.
o print.ftable() and write.ftable() now have a `digits' argument.
o undoc() has a new `lib.loc' argument, and its first argument is
now called `package'.
BUG FIXES
o The behaviour of polygon() with NA coordinate values is now
documented.
o polygon() now correctly recycles the values of border and lty.
Thanks to Denis White.
o readBin() and writeBin() were not always making good use of
long types (such as long double) when available.
o The C function fprec was not handling very small denormalized
numbers correctly. This affected the way they were printed on
Windows, for example.
o legend() now draws points after lines allowing "empty dots on
lines" thanks to Ben Bolker.
o Setting row/column names preserves the names of the dimnames
(PR#809).
o Using help() after help.start() on Unix was failing to find
the linked help files if more than one package was loaded (as
now happens by default).
o scan now sets the maximal sizes internally when `what' is a list
from `nmax' and failing that `nlines'. This uses memory much
more efficiently if `nmax' is specified. read.table() makes use
of this.
o The FORTRAN code used is now much closer to ANSI compliance.
o cov.rob() gives a useful error message on nearly-degenerate
matrices.
o summary() on a data frame was computing results to a precision
based on options("digits") (default 4), not its `digits'
argument. Now results are computed to full precision but
formatted using `digits'.
o summary(m, digits=*) also properly works for matrices.
o When returning parameters from .C/.Fortran, the OBJECT field was
not copied even though class attributes were (PR#834).
o There was a spurious warning from the X11 driver on 100 dpi
displays (PR#840, fix from Tom Vogels).
o scan() was reading all-blank numeric fields as zero.
Should be read as NA, and are now.
o dnbinom(*, size, *) now works again for size < 1 (PR#842).
o dgeom(*, p = 0) and pgeom(*, p = 0) don't give NaN anymore.
o smooth.spline() allows zero weights again.
o aperm() fix for list arg; aperm(*, resize=FALSE) now works with
dimnames (by dropping them).
o The xfig() driver was not closing unclosed polygons as the R
driver expected (but did not document).
o spec.ar() now handles order 1 correctly.
o Add fuzz to prevent anomalies with hist().
o print.matrix() checks length of rowlab, collab (PR#850)
o add1.glm() was using the wrong weights for binomial glms in
cbind(successes, failures) ~ lhs form, since 1.2.0.
o Eliminate packing of the `structRstart' structure, which was
probably non-ISO C and caused some compilers problems (PR#852).
o all.vars() no longer returns empty `names' (PR#829).
o dotplot() passes `cex' down to the mtext() calls used for the
labels (PR#816).
o The pictex() driver was drawing polylines incorrectly (PR#845).
o In the event of a fatal X11 error (this can be generated under FVWM
by selecting Destroy), the input handler would loop, leaving the
"please save work and shut down R" advice useless. There should now
be an opportunity for a relatively graceful exit.
o polyroot() misbehaved if all coefficients except that of the highest
degree term were zero (partial fix for PR#751)
o spline(method="natural") was extrapolating incorrectly (both
to the left and to the right, for different reasons). (PR#653)
o Line clipping was incorrect for log-plots. (PR#839)
o Add explicit test for rank-deficient residuals to summary.manova().
o The help search data bases did not contain the data from the
platform-specific help files.
o parse.dcf() and hence package.contents() now work with a warning
for empty contents' files.
o which.min() and which.max() now properly work for 0-length and
NA-only arguments.
CHANGES IN R VERSION 1.2.1
NEW FEATURES
o New functions factanal(), varimax(), promax() and examples in
package mva.
o New functions readBin() and writeBin() to transfer binary data
to and from connections.
o merge() is partially moved to C to reduce its memory usage.
o library(help = PKG) now displays the contents of the package's
DESCRIPTION file in addition to its INDEX.
o Sd2Rd can handle S4-style documentation too: see `Writing R
Extensions'.
o prompt() now also works with a character argument (useful for
producing many *.Rd files in a loop).
o The Unix front-end shell script now ignores a value for R_HOME
found in the environment.
o Connections functions such as file() now accept a description of
length > 1, with a warning.
o All text-mode connections now accept input with LF, CR or CRLF
line endings. This means that readLines() can be used on DOS
files and source() on Mac files, for example.
Also, CRLF-terminated files can be used as stdin on Unix, and
files with last lines without an EOL mark can be used as stdin
and source()-ed on Unix and Windows.
o DESCRIPTION file has a new recommended `Maintainer:' field.
o stars() now uses a larger "cex" for the labels, and cex and lwd
are now arguments. Further, the argument names (xlim, ylim,
axes) are now consistent with other plot functions. The key symbol
is not clipped anymore into the plot region by default.
o Date-time quantities are now printed with the timezone, if known.
o R CMD build now ignores all files specified (via Perl regexps)
in file `.Rbuildignore' in the top-level source directory of a
package.
o Horizontal boxplots are possible with horizontal = TRUE.
o all.equal() on lists now compares them as generic vectors, that
is they are equal if have identical names attributes and
all components are equal.
o Invalid lines in .Renviron now give warnings when R is started.
o Argument `na.last' implemented for rank().
BUG FIXES
o There have been many small improvements/corrections in the
documentation. In particular:
The help pages for lm and glm now describe the fitted objects.
is.vector() is now correctly documented: complex vectors and
lists return TRUE.
o The default sortedXyData constructor in the nls package now
handles missing values in the response.
o On startup, file .RData is now restored *after* the site and
user profiles are loaded (if at all). This is as previously
documented.
o as.POSIXlt (and *ct) operating on a character string
only extracted the date (and not the time) in some cases.
o as.POSIXct() on character objects was ignoring `tz'.
o codoc(ignore.generic.functions = TRUE) works again.
o Explicitly close files opened by sink() for OSes (such as
Windows) that benefit from it.
o Prevent closing the sink connection (which would be a silly
thing to do).
o showConnections(all = TRUE) was sometimes counting connections
incorrectly, and so not showing some closed ones.
o ts(1:10, start= c(1999,6), end = c(2000,3), frequency = 12)
now prints both years (as it should).
o Monthly multivariate time series now print proper month names
in all cases.
o print.stl(), print.princomp() and print.prcomp() now pass on
`digits =' etc.
o prompt() now produces a \usage{} line for data frames and
other datasets, as documented in `Writing R Extensions'.
o glm() now returns correct linear predictor and fitted values
for zero-weight cases.
o scan(strip.white=TRUE) and readline() could give incorrect
answers when an input field was empty or blank.
o dchisq() now behaves better for large values of its ncp parameter.
o besselJ(*, nu) is now ok for nu < 1; fix improves accuracy of
other values by a few bits as well.
o The convergence criterion in the Fortran SVD code has been
changed to circumvent spurious convergence errors when
comparing extended-precision quantities on ix86 Linux (and
some compilers and options).
o Rdindex now handles multi-line \title{}'s correctly.
o Add weights.glm() so that plot.lm() gets the correct weights from
glm objects (the ones that go with deviance residuals not the
working residuals).
o Printing a language object (e.g. a formula) in a list was
clobbering the buffer holding the tag labels which then were
lost in subsequent lines of printout (PR#746).
o aic in family() objects is now computed more precisely using
dxxxx(log=TRUE). For binomial fits the value was wrong for
models specified via proportions and weights (PR#796).
Avoid NaN values in aic where n = 0 occurs.
o Using non-integer numbers of successes in a binomial glm (as
formerly in demo(lm.glm)) now gives a warning, as the theory and
in particular the AIC value is not applicable.
o demo(is.things) works again {is.ALL() doesn't call methods
anymore}.
o persp(*, nticks = nn) now works (better) for too small nn.
persp(*, main = t1, sub= t2) now work (as always documented).
o Printing of attributes of a list element no longer precedes
`attr' by the tag (PR#715).
o It is no longer possible to use df[foo] to select non-existent
columns in df and so create an invalid object of class
"data.frame" (PR#698).
o edit.data.frame() was trying to set row.names on a list, which
is no longer allowed.
o In the \link[pkg]{topic}, `pkg' was not being used if `topic'
was found in a package in .lib.loc. Now `pkg' is always used.
o plot() with small relative ranges gave an error, which e.g. broke
library(ts); plot(stl(ts(rep(1:7, 15), freq = 7), s.win = "per"))
o Using scan() with a 0-length `what' argument now gives an error
message rather than a segfault.
o Loading .Random.seed could extremely rarely and with some
generators reject a value as NA_INTEGER when it was valid.
o save(..., ascii=TRUE) created broken files when saving strings
containing special characters (ASCII code > 127).
o mean(c(1,NA,NA,NA)[-1], trim = .1, na.rm = TRUE) doesn't give an
error anymore.
o As the supplied afm files are not properly in the ISOLatin1
encoding, the font metric for "-" was wrong since 0.63 on a
postscript/xfig device, and randomly wrong in 1.2.0. It will
now be correct (but the files remain incorrect: C45 is "minus"
not "hyphen" and there are missing slots).
Metrics for the duplicated characters (acute, dieresis,
macron, space) in ISOLatin1 encoding are now correct for both
occurrences: previously only one was present.
o The data-time functions try harder to guess the DST setting
when the OS does not know, as some OSes were printing times
in DST if this was marked as unknown.
o Setting par(pty=) after par(pin=) or par(plt=) was having no
effect until the margins were set.
o Nested \describe sections in .Rd files have (again) nested
indentation when converted to text.
o Concatenation of C strings by ## is no longer used, to avoid
spurious warnings from some recent versions of gcc.
o dev.copy2eps() allows a `paper' argument to be passed to
postscript().
o file.show() handles the case of zero files better.
o formula.lm uses object$formula if it exists, in preference
to object$terms.
o strsplit() is corrected for an empty split pattern.
o kronecker() now does a better job when creating dimnames.
o Better handling of input dimnames in fourfoldplot().
CHANGES IN R VERSION 1.2.0
NEW FEATURES
o There is a new memory management system using a generational
garbage collector. This improves performance, sometimes
marginally but sometimes by double or more. The workspace is
no longer statically sized and both the vector heap and the
number of nodes can grow as needed. (They can shrink again,
but never below the initially allocated sizes.) See ?Memory
for a longer description, including the new command-line
options to manage the settings.
o values of `--min-nsize' up to 50M (2Gb on 64-bit Solaris) are
allowed.
o A (preliminary) version of S4-like connections has been added,
and most functions which take a "file" argument can now work
with a connection as well as a file name. For more details,
see the chapter on Connections in the R Data Import/Export
manual.
o New command-line option `--no-restore-history' implied by
`--vanilla'.
o Command-line option `--no-restore' is now `--no-restore-data'
and `--no-restore' implies `--no-restore-*' (currently `data'
and `history').
o The more recent GNU regex from grep-2.4.2 is used. This uses
locale-based ordering for ranges on platforms with strcoll.
o The print routines now escape " (as \") in a character string
only when it is printed as a quoted string. This makes
print(, quote=FALSE) and cat() consistent.
o The standard methods for add1() and drop1() now attempt to cope
with missing values by using a subset of the data that is
`cleaned' by na.action for the maximal model under consideration.
o anova() for 3 or more lm objects now behaves compatibly with S
and anova.glmlist(). The old behaviour is still available by
calling anovalist.lm() directly.
o anova() for multiple lm and glm objects no longer truncates the
formula printed. There is much more extensive documentation
for anova() methods.
o New method as.data.frame.table() for converting the array-based
representation of a contingency table to a data frame containing
the classifying factors and the corresponding counts.
o New function assocplot() for producing Cohen-Friendly
association plots.
o autoload() accepts lib.loc and other arguments to library()
o bxp() has new argument `frame.plot', as plot.default().
o contour() now has `axes' and `frame.plot' args.
o contrasts(, FALSE) now always returns an identity matrix,
to make model.matrix compatible with S. This affects models
such as lm(y ~ o - 1) where o is an ordered factor.
o `where' command added to debug().
o demo(dynload) (which used the superseded call_R interface)
has been removed.
o Class "dendrogram" in package mva providing general support
for tree-like structures (plotting, cutting, ...).
o dev.copy2eps() and dev2bitmap() preserve the aspect ratio of the
copied device if just one of `width' and `height' is specified.
o dump() has new argument append, argument `fileout' has been
renamed to `file' (for consistency with all other functions).
o edit.default() now checks for an unset `editor' argument, and
terminates with an error if the editor cannot be run.
o The `mode' argument of exists() and get() is interpreted
as mode(x) rather than typeof(x), following S.
o New functions file.access() and file.info() for information on
files on the user's file systems.
o New convenience function file.copy().
o file.show() allows `pager' argument to be an R function, and
consequently, the `pager' option can be an R function.
o Formatting (and printing) of data.frames with complex objects is
improved. toString was added as a new function.
o format() has a new argument `justify' controlling the
justification of character strings (and factors).
o Formula objects now have an environment and code manipulating
them needs to take care to preserve it or set an appropriate
environment.
o New function fourfoldplot() for producing fourfold displays of
2 by 2 by k contingency tables.
o gc() now reports the space allocated, not the space free,
since the total space is now variable.
o New primitive gc.time() to report on time spent in garbage
collection.
o hclust() takes new argument `members' allowing dissimilarity
matrices both for singletons (as until now) and clusters.
o help() has an additional `pager' argument which may be passed to
file.show() {useful for ESS fans}.
o There is now an R `Hershey' list object for Hershey vector font
computations and documentation.
o hist() now returns a "histogram" object and calls the new
function plot.histogram() for plotting.
It now also allows character labels.
o if(*) now gives a more intelligible error message
when "*" cannot be coerced to logical.
o inherits() is now an internal function and compatible with S.
o New function lag.plot() in package ts.
o legend() has a new argument pt.bg.
o The commands history can be loaded with loadhistory(), saved
with savehistory() and displayed with history(), under Windows
and under Unix using the readline or GNOME interfaces.
o mad() has new (logical) arguments "low" and "high" (the first
giving S compatibility).
o New function manova() and summary method.
o Function mantelhaen.test() in package ctest now can deal with
general I x J x K tables. In addition, in the 2 x 2 x K case,
it can also perform an exact conditional test of independence,
and gives confidence intervals for the common odds ratio.
o model.frame() now uses the environment of its formula argument,
rather than the parent environment, to evaluate variables not
found in the data argument. See help(formula).
o mosaicplot() can now also create extended mosaic plots, which
visualize the residuals from a log-linear model using color and
outline.
o New utility function n2mfrow().
o nlm(check.analyticals = TRUE) now warns if the supplied
gradient and/or hessian are of the wrong length.
o New function object.size() to give approximate memory allocation.
o optim() now checks the length of an analytical gradient at
each evaluation.
o The L-BFGS-B method of optim() now support tracing, at several
levels of detail.
o options(check.bounds = TRUE) makes each vector extension
by sub-assignment ("x[.] <- .") produce a warning.
o options(width) now admits to a limit (previously 200, now
10000) and gives a more informative message if out of range
(as it does now for digits and expressions).
o Function path.expand() to do tilde-expansion on file paths.
This provides an interface to R_ExpandFileName, which is now
a documented entry point.
o .Platform has new component "endian", useful for binary file
manipulations.
o plot.function() and curve() now take xlim as default for (from,to)
if the former is specified.
o plot.hclust() allows arguments main, sub, etc, and has non-empty
defaults for these.
o plot.ts(x,y) now allows to suppress labels and lines;
it is better documented.
o The postscript() driver now allows a user-specified family so,
for example, one can use the same fonts in diagrams as in
running text.
o The postscript() driver allows its prolog to be changed (by an
expert) via object .ps.prolog.
o prop.table() and margin.table() now work with an empty `margin'.
o Formerly deprecated function provide() is now defunct.
o New functions read.delim() and read.delim2() to make it
easier to read delimited files as Windows programs tend to
create (usually TAB separated).
o New readLines() function to read a file line-by-line.
o New functions reshapeLong() and reshapeWide() emulating Stata's
reshape command. These are still labeled experimental and
might be improved (or removed) in later versions.
o row.names() and row.names<-() are now generic functions which
call rownames() as their default method and have methods for
class "data.frame".
o New function Rprof() for profiling R expressions under Unix.
Configure with `--enable-R-profiling' (on by default) to make
this operational.
o save(, oldstyle=TRUE) has been withdrawn.
o scan() and read.table() have a new argument `fill' which can
be set TRUE to allow reading files with unequal number of
fields per line. (Programs like Excel have a habit of creating
such files when exporting.)
o scan() and read.table() have a new argument `blank.lines.skip'
to allow blank lines to be read.
o scan() now reads empty character fields as "" not "NA" unless
"" is included in na.strings.
o smooth() in package eda has a better default (3RS3R instead of
3RSR) and more arguments, e.g. `twiceit' for some S
compatibility and `kind = "3R"' for running medians of 3.
o strsplit() has a new argument `extended' controlling whether to
use extended (the default) or basic regular expressions for
splitting.
o Sys.getenv() becomes the preferred name for getenv(), which is
now deprecated.
o New functions Sys.getlocale() and Sys.setlocale() to query and
set aspects of the locale of the R process, and
Sys.localeconv() to find the default decimal point, etc.
o New function Sys.info() for platform, host and user information.
o New function Sys.putenv() to set environment variables.
o New function Sys.sleep() to suspend execution for a while.
o Date-time support functions with classes "POSIXct" and
"POSIXlt" to represent dates/times (resolution 1 second) in
the POSIX formats. Functions include Sys.time(), as.POSIXct(),
strftime(), strptime(), and methods for format, plot, c, ....
There are conversion functions for objects from packages
`date' and `chron'; unlike those packages these support
functions know about time zones (if the OS does).
o tcltk package now has tkpager() which is designed to be used
by file.show() and shows help pages etc. in separate text
widgets.
o tcltk is now more careful about removing the objects
representing widgets in the R workspace when the windows are
destroyed (e.g. using window manager controls)
o tcltk package has had several canvas functions implemented.
o tcltk now wraps callbacks to R in a try() construct - the
nonlocal return from R's error handling could bring the Tk
system into a strange state.
o New demos for tcltk: tkfaq, tkfilefind, tkcanvas.
o termplot() now has an `ask' argument.
o terms() creates objects which now inherit from class "formula",
so for example as.formula(terms.object) needs to be replaced by
formula(terms.object).
o traceback() is now printed un-quoted and labelled by the
frame number.
o New argument `recursive' to unlink(). The default behaviour on
Unix is now that of rm -f, not rm -rf. unlink() is now
compatible across platforms.
o New functions write.ftable() and read.ftable() for writing out
and reading in flat contingency tables.
o write.table() now quotes factor columns if quote=TRUE, and has
a new argument `qmethod' to control the escaping of
embedded quotes in character or factor columns.
o New function xtabs() providing a formula interface to cross
tabulation.
o The R Data Import/Export Manual (`R-data.texi') has been added.
o The set of valid R names is now described (at last) in R-intro.
o The R Language Manual (`R-lang.texi') is now included and built
in the same way as the other manuals.
o The R manuals (R-intro, R-exts, ...) are converted to HTML
format (if the necessary texinfo tools are available) and
linked into the top HTML help page.
o The header file `R.h' and those included from it are now usable
with C++ code.
o New header file `R_ext/Boolean.h': Rboolean type with TRUE and
FALSE enum constants.
o New header file `Rgraphics.h' to allow addons to use graphics
structures.
o Recommended include file `Rmath.h' replaces `R_ext/Mathlib.h'.
o Bessel, beta and gamma functions are now documented as part of
the API. Undocumented entry points are no longer in the
header files, and some are no longer visible.
o Calloc & Realloc failures now give size information.
o DESCRIPTION file in installed packages has a new `Built:' field
giving build information (R version, platform, date).
o Much improved support for C++ code in add-on packages under Unix.
New configure/build variables SHLIB_CXXLD and SHLIB_CXXLDFLAGS
for specifying the command and flags needed for building shared
libraries containing objects from a C++ compiler.
Configure tries to get these right in typical cases (GNU tools
and/or common platforms).
C++ source suffixes `.cpp' and `.C' are now recognized in
addition to `.cc'.
o Configure/build variables MAINLD and MAINLDFLAGS are renamed to
MAIN_LD and MAIN_LDFLAGS for consistency with other MAIN_* vars,
similarly for SHLIBLD and SHLIBLDFLAGS.
o Configure/build variable FLIBS now only contains the Fortran 77
intrinsic and run-time libraries needed for linking a Fortran 77
program or shared library (as determined by configure). BLAS
library detection was extended, with results saved to the Make
variable BLAS_LIBS which is also available to add-on packages.
o R CMD build and check have been completely re-written in Perl.
In addition to running examples, check now also checks the
directory structure and control files, makes a temporary
installation and runs LaTeX on the help pages. Build has been
reduced to cleaning, rewriting indices and creating tar files.
The same files of Perl code are now also used under Windows.
o Add-ons for utilities like Perl or LaTeX have now a central
place in $R_HOME/share. Migration of existing files might take
a while, though.
o Preliminary support for building R as a shared library (`libR')
under Unix. Use configure with option `--enable-R-shlib' or do
`make libR' in directory `src/main' to create the shared
library.
There is also a linker front-end `R CMD LINK' which is useful
for creating executable programs linked against the R shared
library.
BUG FIXES
o New "[.AsIs" function fixing PR#665.
o Effectively zero-length arrows() are omitted (rather than getting
a system- and device-dependent arbitrary angle).
o barplot() passes "..." down to plot.window as documented.
o bxp(*) now obeys axes, xaxt, yaxt & ylim arguments (again?).
o contour(.., labcex = 0.6, .. , vfont = c("sans serif", "plain"), ..)
now behaves as it has been documented, PR#740.
o D(.) is now more correctly documented, has second argument
"name" instead of "namevec" (S compatibility), and gives a warning
when name has not length 1.
o dbinom() and dpois() now use a the accurate algorithm of C.Loader;
e.g., 1 - 2*sum(dbinom(0:999, 1999, 1/2)) is now zero instead of 1e-12.
o dbeta(), df(), dt(), dnbinom(), dgeom(), dgamma(),
now all use the more accurate algorithms of dbinom() and dpois();
More limits are computed correctly, e.g. dgeom(Inf,*), or
dnbinom(*,*,p=0), and integer argument coercion is more consistent.
o dbeta(x, a,b) was giving NaN and Inf for large a and b.
o The math functions now (again!) return NaN (not NA)
when the warning message says so (e.g. gamma(-1)).
o Paper sizes for "a4" and "legal" were interchanged in dev.print().
o Improved logic in the re-scaling of plots in dev.print().
o dev.print() and dev.copy2eps() now evaluate arguments as
needed, so e.g. dev.print(file="junk.ps", horizontal=F) will
work (previously =FALSE was needed).
o Now dweibull(0,1) == dexp(0) == 1 for consistency.
o Changing column modes from factor/character to numeric in
edit.data.frame() (and fix() on data frames) is now allowed.
o gctorture() did return a value although documented not to, that of
gcinfo. It now returns the previous setting of gctorture.
o glm() now follows lm() in dropping unused factor levels when fitting.
o hist() now labels y-axis Density rather than Relative Frequency
if freq=FALSE. The `intensities' component of the result is
now deprecated and `density' should be used instead.
o hsv() truncation bug fixed (hopefully correctly this time...)
o library.dynam() no longer fails if the library appears more than
once in lib.loc.
o lm.fit & lm.wfit (and hence lm) now give understandable error
messages when there are 0 non-NA cases.
o match() does not always use "as.character()" anymore, fixes PR#741.
o Trimmed mean() and median() are no longer attempted for complex
data.
o median() of empty vector is now NA.
o model.matrix() can now handle NAs in factors.
o model.matrix() now uses ":" not "." in labelling interaction
terms, as terms() and the prototype do (PR#701).
o old.packages() now sorts version strings correctly by
splitting at "." and "-".
o optim() has several new precautions against bugs, one of which was
an infinite loop in the L-BFGS-B method if the derivatives
were inaccurate (or if numerical derivatives were used and the
problem was badly scaled).
o pairs() now obeys an "cex = " argument, and so does panel.smooth().
o pf() had a bug in the code handling large noncentrality
parameters, going all the way back to the original Appl.Stat.
algorithm (PR#752). This affected pbeta() as well.
o phantom(expr) in plotmath was used to calculate the bounding
boxes, but the space was not actually used in typesetting the
expression (PR#622).
o Problem with subsetting and "..." arguments in plot.formula()
(PR#757)
o plot.lm() has a better default for its `ask' argument.
o plot.new() does *NOT* allow an argument (`ask') anymore.
This has not been working (since ~ R 0.49), is low-level and
hence should not break anything.
o plot.stl() now uses correct time labels for tickmarks of x-axes.
o pnorm() is somewhat more accurate (SIXTEN=16; PR#699) and
`infinitesimally faster' in some cases, thanks to James M. Rath.
o Failure to open a postscript() device now gives diagnostic warnings.
o Zero the widths of undefined chars in postscript().
o Make font metrics local to the device in postscript(), so
that simultaneous instances of postscript/xfig/bitmap can use
different values for `family'.
o postscript() no longer uses the initclip operator, which
was against the EPSF specifications and broke inclusion of
graphics in some documents.
o In postscript(), cleaned up the internals to fix some
cases where it was unclear whether a variable was meant to set
or track device status.
o In some cases, emitted postscript violated the PS Document
Structuring Conventions since some settings were carried over from
one page to the next. (Caused breakage when turning
antialiasing on/off in "gv" for instance.)
o The DocumentMedia comment in postscript() output was wrong,
and the font DSC comments have been changed to the preferred
style for DSC 3.0.
o pretty(x <- c(2.8,3))[1] - x[1] is now 0; in general,
p <- pretty(x) now again fulfills p[1] <= x[] <= p[length(p)].
o print.dist() {mva} now passes "..." to print.default.
o print.noquote("ABC") now works.
o prompt(fn) uses fn's "source" attribute if it has one.
o In prop.test(), the conf.int. now contains the estimate,
even when that is 0 or 1 (PR#714).
o qnorm(0) and qnorm(1) now give -/+ Inf (again!).
o qt(*, log = TRUE) has a somewhat extended working range.
o Specifying col.names in read.table() now overrides any header
line in the data file.
o Bug caused rpois() to generate biased variables in some cases.
o scale(scale=TRUE) gave all NAs in any columns containing NAs.
o eda's smooth() now computes Tukey's endrule properly.
o smooth.spline()'s GCV method now uses a more accurate formula
when there are repeated x points.
o stars() fix (for 0/NA columns) PR#739.
o data(state)'s state.abb has been corrected to use official
2-letter abbrevations.
o strsplit() had two memory leaks.
o tcltk interface now has better string quoting and no longer breaks on
strings with unbalanced braces
o tcltk callbacks used to include a "%..." argument on the call if the
callback function had a "..." argument. This is no longer the case.
o t.test() allows an input vector of length 2.
o Method dispatch in primitive functions such as `c' only
occurred if they were called by that name, and in particular
not if used in lapply or called as .Primitive("c"). It now
always occurs.
o Method dispatching now forces evaluation of promises, so
autoloading works with methods.
o c(0.099999994, 0.2) prints as 0.1 0.2 not 0.10 0.20 after
correcting the precision calculations.
o Internal function fprec was overflowing for numbers around
1e-305.
o [internal] .C("strsignif",*) doesn't use fixed size strings anymore
(possible overflow).
o ff[i] <- r now works for formula (and potentially other
non-standard) objects ff.
o Errors in argument matching could cause crashes if error
handler was used.
o NULL == ... now gives logical(0) instead of an error.
This fixes a bug with e.g. apply(X,2,median, na.rm = TRUE) and
all(NULL == NULL) is now TRUE.
o polylines with more than 64K pieces will now work on more X
servers with the x11 device.
o R CMD Rd2dvi now again works with file names containing "_" or "$".
o R CMD Rdconv now handles .rd as input file extension correctly
in all cases.
o make install could fail if there were no shared libraries to
install (e.g. on vanilla Solaris).
o Rd's \describe{} constructs are converted better to text
output, and \items of >=22 chars now work.
o Help aliases "(" and "{" now work, apart from as PDF hyperlinks.
o NA || x , NA && y (etc) do not give errors anymore, but work as
the "|" and "&" operators and as documented (PR#749).
o Coercing lists to functions failed if argument list was empty.
(PR#743). Also coercing functions to lists was wrong when the
body was a single constant.
**************************************************
* *
* 1.1 SERIES NEWS *
* *
**************************************************
CHANGES IN R VERSION 1.1.1
NEW FEATURES
o data(), example() and help() now search the loaded packages, then
in their .lib.loc argument, the latter as pre-0.99.0. See
their help pages for the precise details.
o help() has a new argument `try.all.packages' set by the option
"help.try.all.packages". If help is not found in the normal
path and this is TRUE then a search is made of all packages
for possible matches.
o Improved detection of Tcl/Tk at configure time. One can either
set configure variables TCLTK_CPPFLAGS and TCLTK_LIBS, or give
the locations of the tclConfig.sh and tkConfig.sh scripts via
the `--with-tcl-config' and `--with-tk-config' arguments.
o prop.trend.test() - test for trend in proportions.
o write.table() has new argument `dec' for setting the decimal
separator (SPSS/Windows and probably others want commas in
continental European locales).
o Advance warning: save(, oldstyle=TRUE) will no longer be
available after this release.
o Symbols can now be coerced to expressions, making
as.expression(quote(a)) work
BUG FIXES
o data() now works correctly with data-only packages.
o Standalone Mathlib can now be made if builddir = srcdir
(working around an undocumented autoconf `feature').
o Check for pre-1.1.0 saved object .Postscript.options in postscript().
o More stringent checks on the arguments to dataentry().
o Specifying xlab as an expression now works again.
o dev2bitmap() works again.
o Numerous uses of `F' and `T' replaced by `FALSE' and `TRUE'.
o bxp() now extends `ylim' properly when notch=TRUE (and a
notch is more extreme than other stats).
Also, varwidth is okay again, see example(split).
o Making manuals without making R first now works.
o princomp() now works when some eigenvalues are tiny negative
values (which are treated as zero).
o SearchEngine.html was not installed when builddir != srcdir.
o lm.{w}fit(x,y,..) now work when x has no column names.
These functions no longer add and subtract n zeros when there's no
offset. They are now documented somewhat.
o Some HTML files used src="R.css" instead of href="R.css" causing
some browsers to ignore the style sheet. `R.css' now passes the
w3c CSS validator and gives the intended results with Internet
Explorer. `R.css' is copied to all library directories.
o The data editor no longer crashes when entries contain more than
45 characters, and works correctly if the field width is
larger than the window width.
o Recording plots used to ignore graphics events before the last
replay.
o plot(), points(), etc now give warnings and error for invalid
`type' arguments.
o matplot() now allows the same `type's as plot().
o dev.print() and dev.copy2eps() now work when called from a
function, such as dev2bitmap().
o anova.glmlist works correctly with decreasing models and
test="F" now gets the correct residual df.
o Functions created (not just edited) with fix() now get
environment .GlobalEnv not the body of fix.
o Rdconv was ignoring OS-specific parts of the files with some
Perl versions. (This did not affect installing packages.)
o R CMD check did not run more than one specific test.
o keyword2html omitted items when changing up a level, so
the HTML search engine keyword list was missing `data' and
`utilities', for example.
o aov() with multiple strata was setting some spurious options.
o Under UNIX, help(, htmlhelp=TRUE) uses the linked copy of the
HTML file in ~/.R if help.start() has been run recently in the
session, so the style sheet and hyperlinks should now be found.
o dotplot's arguments `color' and `lcolor' are now interpreted
correctly if they are vectors of length > 1. (It is not clear
from the help that this was ever intended.)
o Error messages of e.g. do.call() are now spaced properly.
o summary(.matrix | .data.frame) now respects a `digits' argument.
o scan() recognises quoted strings by default again. The default
for the quote= argument got set wrongly when it was
introduced. They are, however, turned off when using sep="\n",
since you probably want unprocessed lines of text in that
case.
o fixed buglet where scan() would double a character following a
terminating quote symbol.
o kmeans was failing on vector inputs (although not documented
to accept such).
o fixes in predict.lm (John Maindonald)
o NCOL got confused by 1D arrays, which it now reports have 1
column rather than NA.
o rep(1:2,c(1,-1)) segfaulted (PR 619)
o x[["a"]] <- y rejected some object types for y (e.g.
expressions) which were accepted in x$a <- y (PR
o data editor froze on empty data frame, and more generally on
zero-length cols.
o data editor did not handle factors properly in numeric-edit
mode.
o table() misbehaved on empty (or all-NA) data
o data editor now handles empty data frames, allowing data entry
to begin with dd<-edit(data.frame()) or
dd<-data.frame() ; fix(dd)
o plotting math expressions when specified as a LANGSXP or
SYMSXP didn't work in several cases: plot(1,main=quote(a))
would segfault and there were problems with title(), text(),
and mtext() as well.
o optim(): no more segfault for REPORT=0; corrected error msg; ..
maxit default is now okay also when "L-*-B" is chosen automatically.
Using (abs|rel)tol with that method now gives a warning.
o text() did not respect its `xpd' argument, the default of which
is still to use par("xpd"); gave a wrong error message in one case.
o polygon() had an incorrect documentation and silently disregarded
"..." arguments.
o predict.loess was giving incorrect results (those for the
non-robust fit) in the case of a fit with family = "symmetric"
and surface = "direct" and prediction with se = FALSE. The
fitted values were missing for such fits.
o Better rendering of ^ and ~ in latex in \code{} (and they should
not appear outside code and verbatim sections).
o Fixed unterminated string problem with lty (PR 584)
o Fixed scoping problem with quasi() family (PR 614)
CHANGES IN R VERSION 1.1.0
NEW FEATURES
o There are several changes to the compile and link flags, and
an attempt is made to use /usr/local/include and
/usr/local/lib on all platforms. Please read config.site and
INSTALL if you have set flags for previous versions.
o New package tcltk, providing interface and language bindings for
the Tcl/Tk graphical interface toolkit. This makes it possible
to do some rather nifty things with buttons and entry fields
and so forth in very few lines of code. It is still somewhat
experimental so don't go churning out thousands of lines of
GUI code and then blame us for changing the API later on. It does
not currently work with GNOME because of event loop differences.
See demo(tkttest) and demo(tkdensity).
o Internally using global R_Expressions [getOption("expressions")]
dramatically speeds up eval.c.
o The X11 support code is now in a separate shared library, and
option `--gui=none' will run R without X11 support (and so x11()
and data.entry() will not be available). R BATCH sets --gui=none.
o Configuring without X (e.g., `--without-x') does work (at last).
configure will report if X11 support has been included.
If R has been built without X11 the default GUI is "none".
o GNOME support files have moved from src/gnome to src/unix/gnome
and the code is now in a separate shared library. Both
`--gui=GNOME' and `--gui=gnome' are allowed.
The main graphics device for use with GNOME is now called
gtk(); the x11() device from the X11 support can also be used.
(The gnome() device remains unreliable, and is by default
unavailable.)
All GNOME support now installs in R_HOME/gnome to make it
easier to package separately.
o Command line option `-g' can now be used as short version of
`--gui'.
o The "keep.source" option now defaults to interactive()
instead of TRUE.
o Many interface enhancements to the data editor, which now uses
(by default) variable-width columns and much less redrawing.
See ?dataentry for a description of the current user interface.
o R under Unix can be sent SIGUSR1 to quit and save or SIGUSR2
to quit and save without running .Last and on.exit
expressions.
o Added ability to use the graphics device driver to perform
horizontal justification of strings. This is used in the
x11(), windows(), postscript() and xfig() drivers and will
lead to more accurate placing of centred or right-justified
strings.
o Formulas created with the tilde operator now contain the
environment in which they were created. The environment of a
formula can be accessed with the environment() function. This
facility is still experimental; it is intended to help
simplify writing modeling functions.
o $ and $<- are now generic functions.
o add1.glm() and drop1.glm() now allow test="F", which is
appropriate for models with estimated dispersion.
o approx() and approxfun() have an extra argument ties= to control
handling of tied x values
o New function as.symbol(), identical to as.name().
is.symbol and is.name() are now identical by definition;
before, they were equivalent by implementation.
o attach() now works for R data files.
o axis() now has additional arguments. The argument "tick" turns
tick drawing on and off (on by default). Additional arguments
line, pos, and outer; allow more flexible placement of axes.
o New device bitmap(), like dev2bitmap() but a stand-alone device.
o boxplot() returns (and bxp() accepts) a list containing the summary
statistics for the boxes (changed from a list of elements one for
each box).
o file="|cmd" is allowed (to pipe output to `cmd'), under cat()
and postscript() and functions that use them (for example, write()).
o New functions chartr() for general-purpose character translation
in character vectors, and tolower() and toupper() for converting
alphabetic characters to lower-case and upper-case, respectively.
o coplot() has new option subscripts=TRUE to pass the indices
to the panel function.
o cor.test(method="spearman") might give slightly better P values,
since it now relies on pnorm() (with proper tail) instead of alnorm.
o dbinom() works for size=0 (where appropriate).
o New trivial function det() for determinant computation
(the example in ?qr did not seem to be sufficient).
o If present in the package, a function .Last.lib will be called
when a package is detached.
o New function dev.copy2eps() copies the current device to an eps
file, taking the size from that of the device.
o dev.print() now prints if possible, and takes the size from
the device being copied.
o edit() or fix() applied to a numeric or character matrix now
uses the data editor, if available.
o edit.data.frame() edits factors in character mode by default,
and will allow the row names to be edited, by default if they
are not 1:nrow(name).
o expand.model.frame() for adding variables to a model frame.
o The handling of estimating the dispersion in glm() fits has been
changed for consistency across methods. For `binomial' and
`poisson' families the dispersion is always taken as one.
For `quasibinomial' and `quasipoisson' families it is always
estimated (by residual chisq/residual df).
o Using "~" when specifying lib.loc (for example to help() or
library()) is now supported.
o image() has a new argument "breaks" and divides the zlim range
into equal-length intervals.
o install.packages() and update.packages() have a new `destdir'
argument for the directory to which to download the packages.
o New function interaction.plot().
o Internal cleanup of lapply()'s C code.
o library(), require(), and sys.source() have a new argument
` keep.source = getOption("keep.source.pkgs") '.
This defaults to false, but can be set (also for base) to true
by setting the environment variable R_KEEP_PKG_SOURCE to "yes"
o Par `lty' in lines() now defaults to par("lty") not "solid",
for consistency with plot().
o list.files() [aka dir()]: path argument has now default = "."
o locator() allows inline graphics parameters (for the plotting
it does with type !="n").
o New function max.col() from MASS, thanks to V&R.
o nlm() can now take additional arguments in ... to be passed to f.
o par() returns elements in alphabetical order, and "ann" as a
logical (not integer).
o .Platform has a new component GUI specifying the GUI in use
(which might be "unknown").
o plot.formula() searches for a plot method for the left-side of the
formula before searching for a plot method for the right-side of
the formula.
o New bitmap devices png() and jpeg() on Unix/X11. (They were
already available on Windows.)
o postscript(print.it=TRUE) now does print the plot file.
postscript(onefile=FALSE) now produces multiple separate files.
o provide() is now deprecated.
o New function quade.test() in package ctest for the Quade test
for unreplicated blocked data.
o quantile(x, probs) now propagates NA/NaN in probs.
o Option for user-supplied normal random generator in RNGkind().
o read.fwf() is no longer dependent on Perl.
o New arguments check.names and strip.white to read.table() and
friends.
o Functions recordPlot() and replayPlot() save a plot to an R
variable and replay it.
o residuals.lm() also allows types "partial" and "response"
as residuals.glm().
o Added col option to rug().
o scale() is now generic with scale.default method.
o New "call. = TRUE" argument for stop(), and
new function stopifnot(.) -- to be used in "make check".
o str(.) has a new optional argument "nchar.max = 128" and truncates
strings longer than that. Also eliminated a few minor glitches.
o The symbols() function is now implemented.
o New function termplot() with similar functionality to
plot.gam() in S.
o The parameters to title() which specify the labels may now
be specified as a list containing the parameter together
with additional modifying par values (cex, col, font) which
affect just that label.
title() also has new line and outer arguments which provide
functionality which matches that in axis().
o New functions which.min() amd which.max().
o The Wilcoxon and Ansari-Bradley tests now optionally return
confidence intervals for the location or scale parameter of
interest.
o New argument `extend' to window() (and updated documentation).
o write.table() can now write CSV files in the format Excel expects.
o New device xfig() to produce XFig files.
o New xyz.coords() utility function to be used for 3D highlevel plots.
o R CMD build now also works for package bundles.
o Rdconv allows an output file to be specified.
o Initial support for C++ source code in add-on packages under Unix.
o Mathlib can be built as a standalone library: see directory
src/nmath/standalone.
o The trace() function has two new features. Giving where= as a
function name allows tracing of functions called from a
namespace. A new argument edit= allows inserting arbitrary
tracing code in the function. See the online help for
details.
o Namespaces and S4 classes/methods should work better
together. Generic function and class definition objects are
used in many places where the name of the function or class
was used before, which caused problems for non-exported objects.
BUG FIXES
o The Mathlib functions now use exactly the same values for
+/-Inf, NaN and NA as the rest of R in all cases.
o Improved automatic remaking.
o option keep.source was not set correctly before the base
package was loaded: some functions in the base package had
the source kept. The memory usage should now be reduced by ca 1Mb.
o The base file is no longer closed twice in case of a syntax
error (caused segfault on Linux).
o The X11 data editor scrolls cells and so allows more than ca 10
characters to be entered. Several interface/redraw errors
have been corrected.
o Using `destroy' or `close' on the X11 data editor window killed R.
o Multiple `destroy' events or X11 errors killed R (PR#400).
o Warnings from .Last or closing devices are printed where
sensible (e.g. not on GNOME nor Windows console).
o add1.glm() and drop1.glm() gave incorrect results in the "Chisq"
test option when the scale was estimated.
o aggregate() applied to multiple time series lost the series names.
o as.hclust.twins() in package mva sets method=NA (PR#538)
o ave(1:3) now works (as when is.null(list()) was TRUE years ago).
o barplot(c(0.1, 0.5, 1), ylim = c(0, 1)) now works: [xy]axs="i"
and exact limits now labels the limits.
o by() works when embedded in a function.
o The xlab and ylab in coplot() now set the x and y axis labels,
as in S. Supply a second component to label the conditioning
variables.
o count.fields() and read.table() now have the same default
quote = "\"'".
o guard against segfault in dataentry(x<-1, Modes = plot), and the like.
o dev.print() now checks if the current device is replayable
(and not all devices were, despite the documentation).
o The gtk() device (formerly x11() under GNOME) was incorrectly
returning character information, so in particular `*' was
wrongly centred as a plotting symbol.
o is.qr() checks not only for $qr, but also for $rank & $qraux, PR#482.
o library() will not leave the package on the search path if
loading fails (including if .First.lib fails).
o lqs(, method="S") rounded k0 on passing to C.
o na.omit() now handles vectors and matrices as well as data
frames.
o plot.lm(*, which=4) now works thanks to Marcel Wolbers.
o postscript() now uses the options "papersize" and "printcmd"
rather than the values of R_PAPERSIZE in the environment
and R_PRINTCMD found at build time.
o postscript() now makes use of kerning information in computing
string widths.
o M <- 2 ; print(ppr(.., nterms = M)) now works.
o ppr(, sm.method="spline") had an internal limit of 250 rows:
this is now 2500 and is now checked.
o predict.lm(,type="terms",se.fit=T) gives correct standard errors
(thanks to John Maindonald)
o print.ftable() now returns its argument.
o proj.aovlist() now gives a non-zero result for strata with
no fitted effects.
o qnorm() is now based on AS 241 instead of AS 111, and should
give precise results up to 16 digits precision.
o rgeom(, prob=1) gives 0 rather than NA
o rpois(*, lambda) now works when lambda > .Machine$integer.max
o strheight("X") with no active device would segfault.
o system() is now (partially) functional on systems without popen.
o Fixed bug in undoc() - requiring new `chdir' argument
for sys.source()
o Fixed problem in usemethod() where CAR(call) could be non-symbol.
o The x11() device no longer crashes R if a font is not found,
and will warn if there is a size mismatch of more than 10%.
o R CMD Rd2dvi now sorts files alphabetically.
o Rdconv now reports if an invalid type is specified (rather
than using latex).
o Support for Rd conversion to Sd has been reinstated (it was
unintentionally removed along with nroff-based conversion to text).
o \deqn{} fix in R-exts.texi, PR#523.
o Linpack.h now makes clear which routines are actually in R.
o Entry-point "pythag" is now loaded even though it is not
necessarily used in R. Where "hypot" is available pythag
just calls hypot after checking for special values.
o call_R will now correctly handle character vector arguments.
o The alphabet links on top of HTML function indices with more than
100 entries now contain only the letters which are really
first letters of at least one entry.
CHANGES IN R VERSION 1.0.1
BUG FIXES
o pgamma(Inf, 1, Inf) gives NaN instead of an infinite loop, PR#462.
o Inline xaxt and yaxt parameters were ignored.
o Setting the normal RNG was not always recorded in .Random.seed.
o \link[pkg]{foo} links were wrongly translated to HTML.
o Direct use of show.data() with no args was incorrect.
o print.coefmat does sensible things if options
show.signif.stars and show.coef.Pvalues are not set correctly.
o x <- list(a=1, b=2) ; x["c"] <- 3 now (again) stretches the list
rather than give a "subscript out of bounds" error.
o Models with response appearing on rhs could cause segfault.
o as.data.frame.matrix will now ensure the columns added have
non-empty names.
o Some (strange?) model formulas could cause memory corruption
(thanks to John Fox for digging this up).
o Matrix multiplication in cases such as 1:3 %*% t(1:2) is accepted.
o Options --nsize and --vsize to R CMD check gave warning
messages and only one was accepted.
o The autoload()s during startup are "wrapped" such
that conflicting objects don't break startup.
o cor.test(*, meth="spear") {pkg ctest} now works (again) for n <= 6
o scale = 0 in biplot.princomp() now works.
o The scores given by princomp(, cor = TRUE) and the rotated
values given by prcomp(, scale = TRUE) are now computed from the
scaled data.
o barplot now works okay when length(col) < length(legend.txt),
thanks to Ben Bolker, PR#494.
o legend has new args `ncol' and `horiz' thanks to Ben Bolker.
o kernel("dirichlet", m=10, r=1) in package ts now works.
o save/restore of environments containing "..." object should
work now.
o qhyper should work better for large N.
o qbinom(1-1e-16, n, p) , qpois() and qnbinom(*) looped for ever.
o as.matrix.data.frame no longer escapes quotes in character
vectors.
o R would try to save the readline history at the end of
non-interactive sessions, causing crashes on some systems.
o Subtle roundoff problems caused arrays to be allocated short in
loess.c in some cases, leading to segfaults.
o Document that postscript(file="") sends the output directly to
the default printer.
o ts.union(, dframe=TRUE) had a long-standing typo, now works.
o save(, ascii=TRUE) had problem with octal escapes in strings
when there was a digit following, should work now.
o matpoints() and matlines() now also have a "type =" argument
with defaults "p" and "l", respectively; PR#506.
o The new Perl 5.6 broke our version-detection mechanism. A
better one has been inserted.
o X11(colortype="gray") failed to work on 8-bit screens, and
more generally when colour allocation failed X11() did not
revert to monochrome correctly (and did not say it was doing so).
It was not documented in the help that to change the X11
colortype one needs to close all open X11 devices.
o loessf.f in modreg defined DSIGN unecessarily and this caused
a conflict on AIX.
o plot.lm will now work with rlm objects.
o start and end behave better when the frequency is not an integer.
o aggregate.ts is closer to S-PLUS's aggregate.rts.
o quantile(x) now works when x contains several +/- Inf's.
o guard against segfault in dataentry(0,0) (or, more
realistically, when mistyping data.entry(x,y) as
dataentry(x,y))
o fixed special cases that caused bad behavior for methods,
particularly with nested use of primitive operators when
setMethod had been called. Also fixed some situations that
prevented caching methods (and therfore slowed down dispatch
seriously) in similar cases.
o Packages can now have non-exported classes. Previously this
failed because computations could not find methods for objects
from private classes. Adding a "package" attribute to an
object's class attribute (along with a large number of changes
to use the package information) fixes this for most cases.
(Methods for primitive functions still use global information
about classes because of imposed efficiency constraints on
primitives.)
o untrace() now works with package::function-style references.
*********************************************************
* *
* News of 1.0.0 and earlier is in file `OONEWS' *
* *
*********************************************************
|