我想使用 R 生成 n 个唯一名称。这是我现在拥有的代码:
library(randomNames)
set.seed(6232015)
gen.names <- function(n){
while(n>0){
names <- unique(randomNames(n=n))
n <- n - length(names)
names2 <- c(unique(randomNames(n=n)), names)
n <- n - length(names2)
}
return(names2)
}
nombres<- gen.names(n = 40000)
我得到的不是 40000,而是 39999。如果我要求少于 40000,我会得到那个数字。我的代码有什么问题?
谢谢!
最佳答案
您在第二次调用中获得的名称不唯一,导致名称丢失。然后 n 计算中断,允许您离开 while 循环。
让我们来看看它:
names <- unique(randomNames(n=n))
n <- n - length(names)
你有 38986 个唯一的名字,现在 n 是 1014
现在:
names2 <- c(unique(randomNames(n=n)), names)
n <- n - length(names2)
你得到了 1013 个新的唯一名称,在 names2 中给出了 39999 个名称,现在 n 是 1014 - 39999 = -38985
你到达了循环的末尾,当你小于 1 时退出,并返回你的值,但缺少 1 个名字。
这是一个 hacky 解决方案,生成 2000 个额外的名称,然后在循环中检查:
gen.names <- function(n){
names<-c()
while(length(names)<n){
names <- unique(c(randomNames(n=n+2000),names))
}
return(names[1:n])
}
关于r - 用 R 生成 n 个唯一的名字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31016035/