dplyr
думает по столбцам, а не по строкам. Это означает, что он не оценивает n = c(1,2,3,4,5,6)
элемент за элементом, но все элементы одновременно.
Выполнение:
mutate(
data.frame(n = 1:6),
len = length(filter(dice, roll == n)$roll))
Я получаю
n len
1 1 164
2 2 164
3 3 164
4 4 164
5 5 164
6 6 164
Warning message:
In roll == n :
longer object length is not a multiple of shorter object length
Чтотак же, как:
sum(dice$roll == 1:6)
[1] 164
Warning message:
In dice$roll == 1:6 :
longer object length is not a multiple of shorter object length
, который сравнивает два вектора в их положении, рециркулируя более короткий вектор так часто, как это необходимо, давая предупреждение, когда длины не совпадают.
Если вы установитеrowwise()
между ними оценивает n
элемент за элементом:
data.frame(n = 1:6) %>% rowwise() %>% mutate(len = length(filter(dice, roll == n)$roll))
# A tibble: 6 x 2
n len
<int> <int>
1 1 172
2 2 159
3 3 176
4 4 168
5 5 174
6 6 151