eheinzen / elo

An R package to calculate Elo ratings
https://eheinzen.github.io/elo/
37 stars 3 forks source link

Issues with (lack of) deep copying in C++ code #25

Closed eheinzen closed 6 years ago

eheinzen commented 6 years ago

Primarily affects initial.elos, which isn't deep-copied.

> library(elo)
> set.seed(99)
> dat <- data.frame(A = paste0("Team ", sample(1:200, size = 1e4, replace = TRUE)),
+                   B = paste0("Team ", sample(1:200, size = 1e4, replace = TRUE)),
+                   A.wins = sample(0:1, size = 1e4, replace = TRUE))
> dat <- dat[dat$A != dat$B, ]
> dim(dat)
[1] 9945    3
> elo.run(A.wins ~ A + B, data = dat, k = 20)$initial.elos
  Team 1  Team 10 Team 100 Team 101 Team 102 Team 103 Team 104 Team 105 Team 106 Team 107 Team 108 Team 109  Team 11 Team 110 Team 111 
1472.098 1505.559 1520.688 1481.828 1416.063 1482.528 1503.103 1445.576 1444.130 1493.314 1506.111 1531.082 1533.047 1527.494 1579.731 
Team 112 Team 113 Team 114 Team 115 Team 116 Team 117 Team 118 Team 119  Team 12 Team 120 Team 121 Team 122 Team 123 Team 124 Team 125 
1527.395 1523.597 1578.123 1528.501 1475.993 1475.730 1568.259 1475.567 1488.854 1589.015 1501.911 1517.984 1438.716 1448.938 1526.779 
Team 126 Team 127 Team 128 Team 129  Team 13 Team 130 Team 131 Team 132 Team 133 Team 134 Team 135 Team 136 Team 137 Team 138 Team 139 
1570.446 1470.805 1502.065 1461.459 1583.390 1537.304 1448.373 1486.042 1526.278 1481.886 1514.819 1515.872 1474.411 1531.972 1493.649 
 Team 14 Team 140 Team 141 Team 142 Team 143 Team 144 Team 145 Team 146 Team 147 Team 148 Team 149  Team 15 Team 150 Team 151 Team 152 
1559.556 1552.506 1605.439 1526.055 1495.886 1484.455 1521.292 1571.528 1449.751 1504.723 1537.373 1497.489 1553.836 1509.914 1601.080 
Team 153 Team 154 Team 155 Team 156 Team 157 Team 158 Team 159  Team 16 Team 160 Team 161 Team 162 Team 163 Team 164 Team 165 Team 166 
1506.776 1469.832 1529.241 1589.426 1481.059 1588.003 1432.693 1449.996 1470.980 1504.311 1485.931 1572.666 1465.706 1500.861 1447.580 
Team 167 Team 168 Team 169  Team 17 Team 170 Team 171 Team 172 Team 173 Team 174 Team 175 Team 176 Team 177 Team 178 Team 179  Team 18 
1576.923 1492.189 1480.075 1523.274 1458.480 1558.134 1511.874 1503.440 1429.839 1460.582 1528.756 1504.382 1517.005 1540.731 1509.286 
Team 180 Team 181 Team 182 Team 183 Team 184 Team 185 Team 186 Team 187 Team 188 Team 189  Team 19 Team 190 Team 191 Team 192 Team 193 
1532.696 1503.034 1506.896 1517.933 1495.702 1489.134 1503.945 1471.792 1433.364 1514.010 1472.579 1529.614 1423.777 1497.048 1505.465 
Team 194 Team 195 Team 196 Team 197 Team 198 Team 199   Team 2  Team 20 Team 200  Team 21  Team 22  Team 23  Team 24  Team 25  Team 26 
1590.891 1502.275 1472.897 1475.338 1527.898 1485.214 1516.186 1550.531 1516.486 1520.263 1481.953 1504.258 1470.138 1541.798 1494.397 
 Team 27  Team 28  Team 29   Team 3  Team 30  Team 31  Team 32  Team 33  Team 34  Team 35  Team 36  Team 37  Team 38  Team 39   Team 4 
1528.073 1470.953 1462.666 1484.071 1491.981 1501.815 1502.211 1527.622 1540.884 1432.245 1499.994 1511.465 1506.335 1472.974 1517.896 
 Team 40  Team 41  Team 42  Team 43  Team 44  Team 45  Team 46  Team 47  Team 48  Team 49   Team 5  Team 50  Team 51  Team 52  Team 53 
1506.232 1481.432 1503.197 1475.739 1475.969 1565.220 1489.827 1445.823 1512.652 1487.446 1522.529 1524.649 1473.864 1554.924 1475.301 
 Team 54  Team 55  Team 56  Team 57  Team 58  Team 59   Team 6  Team 60  Team 61  Team 62  Team 63  Team 64  Team 65  Team 66  Team 67 
1502.313 1469.466 1457.076 1528.446 1489.478 1493.624 1442.457 1518.498 1490.755 1417.195 1506.851 1510.959 1516.422 1449.691 1459.706 
 Team 68  Team 69   Team 7  Team 70  Team 71  Team 72  Team 73  Team 74  Team 75  Team 76  Team 77  Team 78  Team 79   Team 8  Team 80 
1547.983 1435.789 1418.150 1524.391 1461.046 1465.066 1446.048 1501.532 1516.791 1480.112 1493.580 1436.665 1522.865 1481.346 1488.925 
 Team 81  Team 82  Team 83  Team 84  Team 85  Team 86  Team 87  Team 88  Team 89   Team 9  Team 90  Team 91  Team 92  Team 93  Team 94 
1478.496 1515.349 1472.637 1479.423 1441.339 1589.236 1555.641 1456.813 1502.588 1425.033 1464.977 1437.403 1499.269 1547.252 1510.186 
 Team 95  Team 96  Team 97  Team 98  Team 99 
1409.630 1431.065 1515.232 1549.320 1484.986 

> r <- final.elos(elo.run(A.wins ~ A + B, data = dat, k = 20))
> all(r == elo.run(A.wins ~ A + B, data = dat, k = 20)$initial.elos)