我正在计算我在R中使用100次的两个骰子的每个角色得到相同的结果。我使用过
werFun <- function() {
return(sample(1:6,2,TRUE))
}
count <- 0
matResult <- matrix(0,100,2)
for (i in 1:nrow(matResult)) {
matResult[i,] <- werFun()
if(matResult[i,1]==matResult[i,2]){
count=count+1
}
}
print(count)
有优雅的解决方案吗?
答案 0 :(得分:4)
试试这个
matResult <- matrix(replicate(100,sample(1:6,2,TRUE)),ncol = 2,byrow = T)
nrow(matResult[matResult[,1]==matResult[,2],])
另一种解决方案也适用于n
骰子。
sum(apply(matResult,1,var)==0)
答案 1 :(得分:3)
要正式化我的评论,您可以使用 <a th:href="@{/greeting/{id}/delete(id=${greeting.id})}" th:text="delete"></a>
@RequestMapping(value="/greeting/{id}/delete",method=RequestMethod.GET)
public String deleteGreeting(@PathVariable int id) {
gr.delete(id);
return "redirect:/greeting/list";
}
模拟回滚,并使用 <a th:href="@{/greeting/{id}/edit(id=${greeting.id})}" th:text="edit"></a>
@RequestMapping(value="/greeting/{id}/edit",method=RequestMethod.GET)
public String Edit(@PathVariable int id){
greeting greetingob = gr.findOne(id);
return "edit";
}
模拟重复。结合这两个,你得到一个矩阵。如果您将该矩阵转置并强制转换为data.frame,您可以在其上调用git status
,这将巧妙地向您显示您所获得的卷数:
sample
如果你想要对角线,骰子彼此相等,可以通过将调用包裹在replicate
中来抓住它:
table
总结一下,你将获得骰子相等的掷骰数量:
set.seed(47) # for reproducibility
table(data.frame(t(replicate(100, sample(1:6, 2, TRUE)))))
## X2
## X1 1 2 3 4 5 6
## 1 3 0 4 5 2 1
## 2 2 5 0 1 5 2
## 3 1 3 3 0 3 3
## 4 3 4 1 3 3 7
## 5 6 0 3 1 4 3
## 6 3 3 4 2 7 0
请注意,每次调用它时都会重新采样,因此除非您设置数字生成器种子,否则数字会有所不同。
答案 2 :(得分:2)
如果你真的不需要矩阵来存储所有的滚动历史记录,你可以计算出去的时间,这可能为你节省时间和内存:
sum(sapply(1:100, function(i) {vec <- werFun(); vec[1] == vec[2]}))
这与您的模拟过程基本相同。话虽如此,如果你已经matResult
已经简化了对应部分:
count = sum(matResult[,1] == matResult[,2])