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

时间:2017-08-18 11:41:47

标签: r list random extract

所以我想知道如何从R中的列表中随机提取一个字符串并使用NO REPLACEMENT直到列表为空。 写

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

没有帮助我,因为在列表变空之前,字符串被多次提取。

亲切的问候

2 个答案:

答案 0 :(得分: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
  }
}

答案 1 :(得分:0)

sample(x)

您不能在重复呼叫时使用size = 1,并且希望它知道不要抓取之前选择的值。您必须一次获取所需的所有值。此代码将随机播放您的数据,然后您可以在需要时获取第一个元素。然后下次你需要抓住第二个......等等。