从没有替换的列表中随机提取
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
}
}
所以我想知道如何从 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
}
}