改变掷骰子的值

Max*_*mus 1 r sample dice

所以假设我掷了 5 个骰子。

模拟卷的代码是

Rolls<-sample(1:6, 5, replace=TRUE)

那就是如果我想将我的卷存储在 object 下Rolls

现在让我们说出于某种原因我不希望有超过 2 个 6。这意味着,例如,如果我滚动 6 3 5 6 6 1,我是否能够将 6 个值之一重新滚动为新值,以便只有 2 个值为 6 的值和 4 个不是 6 的值?

任何支持将不胜感激。

提前致谢

Ric*_*tro 5

没有循环的解决方案可能是:

condition = which(Rolls==6)
if(length(condition)>=3){
  Rolls[condition[3:length(condition)]] = sample(1:5, length(condition)-2, replace=TRUE)
}
Run Code Online (Sandbox Code Playgroud)

condition用 6 表示 Rolls 中的位置,如果超过 2,则选择第三个Rolls[condition[3:length(condition)]]并重新采样。

第二个问题可能是这样的:

remove = 3
Rolls = Rolls[-which(Rolls==remove)[1]]
Run Code Online (Sandbox Code Playgroud)

如果您愿意,您可以轻松地将它们放入函数中

编辑 1

为了使第二个答案更具交互性,您可以为其构建一个函数:

remove.roll = function(remove, rolls){
   rolls = rolls[-which(rolls==remove)[1]]}
Run Code Online (Sandbox Code Playgroud)

然后用户可以remove随心所欲地调用该函数。您还可以制作一个从提示中获取信息的程序:

remove = readline(prompt="Enter number to remove: ")
print(Rolls = Rolls[-which(Rolls==remove)[1]])
Run Code Online (Sandbox Code Playgroud)