r - 用 R 生成 n 个唯一的名字

标签 r

我想使用 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/

相关文章:

r - 任意阶多项式的函数(首选符号方法)

r - 如何使用 dplyr 在具有过滤功能的函数内应用 for 循环?

java - 将附加参数传递给 R 中 JDBCDriver 的 dbConnect 函数

r - hist.default(xa) : 'x' must be numeric 中的错误

Tibble 数据类型的行求和

readOGR无法打开图层错误

r - 将多图 ggplots 与拼凑图和单个图例对齐

r - rCharts 中的平行坐标图,如何重现此图表?

R doParallel 进度条来监控已完成的作业

r - R 中复合语句中的奇怪错误? : "target of assignment expands to non-language object"