R 是什么导致';较长的对象长度不是较短对象长度的倍数';在这个片段中?

R 是什么导致';较长的对象长度不是较短对象长度的倍数';在这个片段中?,r,dplyr,R,Dplyr,尝试以下R代码(加载tidyverse): 前3行的行为与预期一致,并对滚动的行数给出合理的计数。最后一行给出了一个错误 1 1 152 2 2 152 3 3 152 4 4 152 5 5 152 6 6 152 Warning message: In roll == n : longer object length is not a multiple of shorter object length 我做错了什么?它是将n作为向量而不是对单个值进行操作吗 注意。我知道这不是一个合理的

尝试以下R代码(加载tidyverse):

前3行的行为与预期一致,并对滚动的行数给出合理的计数。最后一行给出了一个错误

1 1 152
2 2 152
3 3 152
4 4 152
5 5 152
6 6 152
Warning message:
In roll == n :
  longer object length is not a multiple of shorter object length
我做错了什么?它是将n作为向量而不是对单个值进行操作吗

注意。我知道这不是一个合理的方法来计算每个值的元素数。这只是一个方便的问题来说明这个问题,它发生在一个更混乱的例子中


谢谢

dplyr
按列而不是按行思考。这意味着它不会一个接一个地计算
n=c(1,2,3,4,5,6)
元素,而是一次计算所有元素

做:

mutate(
  data.frame(n = 1:6), 
  len = length(filter(dice, roll == n)$roll)) 

我明白了

这与:

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


data.frame(n=1:6)%%>%rowwise()%%>%mutate(len=length(filter(dice,roll==n)$roll))
#一个tibble:6x2
兰恩
1     1   172
2     2   159
3     3   176
4     4   168
5     5   174
6     6   151

添加
rowwise
使其工作:
数据.帧(n=1:6)%%>%rowwise()%%>%mutate(len=length(filter(dice,roll==n)$roll))
您只需执行
骰子%>%count(roll)
@Humpelstielzchen谢谢。如果你能把它写成一个答案,我会接受的。(编辑:看了之后我仍然不明白为什么有必要……)@AndrewGustar请阅读问题的最后一段!
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


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