如何使用4种 colored颜色 随机采样368幅图像的 colored颜色 顺序

  • 不应直接重复("red" "red" "blue" would not be ok, but "red" "blue" "red" would be)
  • 每一次出现的数量是否应该相等(每次92次,因为368/4=92)?

基于this,我已经在没有直接重复的情况下进行了采样:

library("dplyr")
set.seed(340)
values <- c("blue", "red", "green", "yellow")
len <- 368 # number of samples
samp <- sample(values, 1) # initialise variable
cols <- sapply(2:len, function(i) samp[i] <<- sample(setdiff(values, samp[i-1]), 1, replace = TRUE))
table(cols) # colors appear 94, 92, 88, 93 times

我try 构建一个for循环进行采样,直到达到if(table(cols)[1:4] == 92)的确切数字,但它不起作用,而且在做了大量研究之后,我仍然不知道如何继续.如果能有提示和帮助,我会非常感激的!

推荐答案

你可以试试这个.我们的 idea 是首先创建排序后的向量(seqc).然后,对于每次迭代,该算法从可能的值中采样一个值(即,除向量中的前一个值之外的所有值).

seqc <- rep(values, each = 92)
vec <- sample(seqc, 1)
seqc <- seqc[-match(vec, seqc)]
for (i in 2:368){
  vec[i] <- sample(seqc[seqc != vec[i - 1]], 1)
  seqc <- seqc[-match(vec[i], seqc)]
}

输出

head(vec)
# [1] "red"    "blue"   "red"    "yellow" "blue"   "yellow"

table(vec)
#vec
#  blue  green    red yellow 
#    92     92     92     92

它可能会抛出错误,因为算法可能不会按预期工作.在这种情况下,重新运行它,直到它工作;它通常不超过3次迭代就能工作.

R相关问答推荐

使用ggcorrplot在相关性矩阵上标注supertitle和index标签

R的GG平行坐标图中的排序变量

更改绘图上的x轴断点,而不影响风险?

查找图下的面积

如何计算前一行的值,直到达到标准?

gt()从gt为相同内容的单元格 colored颜色 不同?

在R中,如何将变量(A,B和C)拟合在同一列中,如A和B,以及A和C在同一面板中?

plotly hover文本/工具提示在shiny 中不起作用

如何删除仅在数据集顶部和底部包含零的行

在ggplot2的框图中绘制所有级别的系数

按时间顺序对不同事件进行分组

如何将使用rhandsontable呈现的表值格式化为百分比,同时保留并显示完整的小数精度?

R+reprex:在呈现R标记文件时创建可重现的示例

如何在ggplot2中创建多个y轴(每个变量一个)

使用gt_summary是否有一种方法来限制每个变量集进行配对比较?

注释不会绘制在所有ggplot2面上

如何获取R chromote中的当前URL?

按两个条件自动过滤数据

如何计算多个变量的百分比与总和的百分比?

如果缺少时间,如何向日期-时间列添加时间