在 R 情节中的足球场上移动球员的机会

Moving players on chance on a soccer field in R plot

背景:

我正在尝试想出一个编码方案,以便我的 14 个玩家中的任何一个(单独;每个玩家都显示为下面的编号圆圈) 在我的足球场的中心粗线上独立 向左移动 .1 (x 轴值单位) 如果 [=14= 的结果] 是 1,如果 outcome = sample(x = c(1, 2), size = 1) 的结果是 2,玩家 向右移动 .1(x 轴值单位)。

因此,目标是每个玩家都可以根据 outcome 的结果独立地向左或向右移动。

编码问题(R代码如下):

我是否需要为每个玩家写 16 次 outcome[i] = sample(x = c(1, 2), size = 1),然后构建如下内容:

outcome1 = sample(x = c(1, 2), size = 1)
outcome2 = sample(x = c(1, 2), size = 1)
#.
#.
#.

然后根据他的 outcome 更改该玩家的 x:

if(outcome1 == 1) {  points(x - .1, y, cex = 4.5, lwd = 3, pch = 21, bg = 0)  
  } else { points(x + .1, y, cex = 4.5, lwd = 3, pch = 21, bg = 0)  }

或者有更好的方法?

这是我的 R 代码:

plot(1, ty = "n", ann = F, cex = 3)

par = par('usr')
rect(par[1], par[3], par[2], par[4], col = 'darkseagreen1' )

points( 1, 1, cex = 5, pch =20, col = 0)
points( 1, 1, cex = 33, lwd = 5, col = 0)
abline(v = 1, lwd = 10, col = 0)

rect(.6, .6, 1.4, 1.4, lwd = 5, border = 0)
rect(0, .85, .65, 1.15, lwd = 5, col = 'darkseagreen1', border = 0)
rect(1.35, .85, 1.45, 1.15, lwd = 5, col = 'darkseagreen1', border = 0)
box()

x = rep(1, 14); y = seq(.6, 1.4, len = 14)
points(x, y, cex = 4.5, lwd = 3, pch = 21, bg = 0)
text(x, y, 1:14, font = 2)

您可以先对每个玩家的所有动作进行采样并将其存储在矩阵中(行是玩家,列是时间步长):

nSteps <- 16
nPlayers <- 14

## Sample movement of players:
xStepsMx <- matrix(sample(c(-1,1)*0.1, nPlayers*nSteps, replace = TRUE),
        nrow = nPlayers, ncol = nSteps)

然后您可以评估每个玩家在每个时间步的位置:

## Position of players:
xPosMx <- t(sapply(1:nrow(xStepsMx), function(ii) cumsum(xStepsMx[ii,]))) + x 

对于 1,2,...,16 中的每个时间步长 timeStep,您可以例如使用

绘制玩家的位置
timeStep <- 5    
points(xPosMx[,timeStep], y, cex = 4.5, lwd = 3, pch = 21, bg = "white")
text(xPosMx[,timeStep], y, 1:14, font = 2)