从没有替换的列表中随机提取

Random extraction from a list with NO REPLACEMENT

所以我想知道如何从 R 中的列表中随机提取一个字符串,并且没有替换,直到列表为空。 写

sample(x, size=1, replace=FALSE)

对我没有帮助,因为在列表变空之前字符串被提取了不止一次。

亲切的问候

sample(x)

您不能在重复调用中使用 size=1 并期望它知道不获取先前选择的值。您必须一次获取所有想要的值。此代码将打乱您的数据,然后您可以在需要时获取第一个元素。然后下次你需要什么的时候拿第二个……等等。

在每次迭代中,将选取一个列表元素,并从该元素中删除一个值。如果只剩下一个值,则删除列表元素。

x <- list(a = "bla", b = c("ble", "bla"), c = "bli")
while (length(x) > 0) {
  s <- sample(x, size = 1)
  column <- x[[names(s)]]
  value <- sample(unlist(s, use.names = FALSE), size = 1)

  list_element_without_value <- subset(column, column != value)

  x[[names(s)]] <- if (length(list_element_without_value) == 0) {
    NULL
  } else {
    list_element_without_value
  }
}