如何在R中生成自增ID

2023-11-23

我正在寻找一种有效的方法来为我生成的一些合成数据创建唯一的数字 ID。

现在,我只有一个函数,它从全局变量中发出并递增一个值(请参见下面的演示代码)。然而,这很混乱,因为我必须初始化idCounter变量,如果可能的话我宁愿不使用全局变量。

# Emit SSN
idCounter = 0
emitID = function(){
  # Turn into a formatted string
  id = formatC(idCounter,width=9,flag=0,format="d")

  # Increment id counter
  idCounter <<- idCounter+1

  return(id)
}
record$id = emitID()

The uuid包提供的功能接近我想要的,但我需要 ID 仅是整数。有什么建议么?也许有一种将 UUID 值转换为某种数值的方法?显然会发生一些碰撞,但这可能没问题。我想,最多需要 10 亿个值。

感谢您的任何建议!

-Rob


计数器的非全局版本使用词法范围来封装idCounter与增量函数

emitID <- local({
    idCounter <- -1L
    function(){
        idCounter <<- idCounter + 1L                     # increment
        formatC(idCounter, width=9, flag=0, format="d")  # format & return
    }
})

and then

> emitID()
[1] "000000000"
> emitID1()
[1] "000000001"
> idCounter <- 123   ## global variable, not locally scoped idCounter
> emitID()
[1] "000000002"

一个有趣的替代方案是使用“工厂”模式来创建独立的计数器。你的问题意味着你将调用这个函数十亿次(嗯,不确定我从哪里得到这个印象......)次,所以也许通过创建 ids 缓冲区来向量化对 formatC 的调用是有意义的?

idFactory <- function(buf_n=1000000) {
    curr <- 0L
    last <- -1L
    val <- NULL
    function() {
        if ((curr %% buf_n) == 0L) {
            val <<- formatC(last + seq_len(buf_n), width=9, flag=0, format="d")
            last <<- last + buf_n
            curr <<- 0L
        }
        val[curr <<- curr + 1L]
    }
}
emitID2 <- idFactory()

进而 (emitID1是上面局部变量版本的实例)。

> library(microbenchmark)
> microbenchmark(emitID1(), emitID2(), times=100000)
Unit: microseconds
      expr    min     lq median     uq      max neval
 emitID1() 66.363 70.614 72.310 73.603 13753.96 1e+05
 emitID2()  2.240  2.982  4.138  4.676 49593.03 1e+05
> emitID1()
[1] "000100000"
> emitID2()
[1] "000100000"

(原始解决方案大约比emitID1,尽管速度并不是一切)。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在R中生成自增ID 的相关文章

  • 将第 N 行上的 NA 行插入 data.frames 列表,其中 N 来自列表

    经过几个小时后 我发现自己无法解决以下问题 我有一个数据框列表 我想分别向每个 DF 插入 而不是替换 一行或多行 NA 始终至少一行 要插入的 NA 数量存储在单独的列表中 为了说明这一点 我有以下两个列表 list of datafra
  • 获取函数的命名空间

    我正在开发一个包 我希望在其中向对象添加编辑历史记录 该包允许其他包注册用于编辑对象的函数 我正在寻找一种方法来记录注册用于编辑的函数的包的版本 问题是 给定一个函数 如何从导出的位置获取包 我的想法是调查它的搜索路径 但是search 仅
  • 无法更新/编辑从 R 中的包(`gratia`)导出的 ggplot2 对象

    我希望我在这里遗漏了一些令人痛苦的明显的东西 我希望更新 例如 修复标题 实验室等 由 生成的 ggplot 对象gratia draw 不太确定为什么我无法更新该对象 有一个简单的解决方案吗 devtools install github
  • 如何在 Caret 中绘制随机森林(护林员)树

    我生成了如下所示的随机森林树 并尝试绘制它 但出现错误 我在哪里犯了错误 我怎样才能以正确的方式绘制它 Actmodel lt train Activity Section Author data CB1 method ranger trC
  • 如何对数字进行四舍五入并使其显示零?

    R 中将数字四舍五入到小数点后 2 位的常用代码是 gt a 14 1234 gt round a digits 2 gt a gt 14 12 但是 如果该数字的前两位小数位为零 则 R 会在显示中抑制零 gt a 14 0034 gt
  • 尝试使用 JRI 将 R 与我的 Java 应用程序集成,但出现错误。谁能解释一下原因和解决办法吗?

    我需要将 Java 与 R 集成来运行一些数学命令并使用 R 的功能进行绘图 以下部分代码给出了错误 public static void main String args HelloRWorld r new HelloRWorld r h
  • R - 计算 bin 中特定值的数量

    我有一个如下所示的数据框 df Value lt c 1 1 0 2 1 3 4 0 0 1 2 0 3 0 4 5 2 3 0 6 Sl lt c 1 20 df lt data frame Sl Value gt df Sl Value
  • 警告消息 - 来自 dummies 包的 dummy

    我正在使用 dummies 包为分类变量生成虚拟变量 其中一些变量具有两个以上类别 testdf lt data frame A as factor c 1 2 2 3 3 1 B c A B A B C C C c D D E D D E
  • 如何在 data.table 中分组后使用条件计算行数

    我有以下数据框 dat lt read csv s1 s2 v1 v2 a b 10 20 a b 22 NA a b 13 33 c d 3 NA c d 4 5 NA c d 10 20 dat gt A tibble 6 x 4 gt
  • 在R中循环子文件夹

    我正在 R 环境中包含多个子文件夹的文件夹中工作 我想要循环遍历多个子文件夹 然后在每个子文件夹中调用 R 脚本来执行 我想出了下面的代码 但我的代码似乎添加了 到子文件夹列表 我收到错误 文件中的错误 文件名 r 编码 编码 无效的 描述
  • 如何按时间间隔匹配数据帧?

    这是我从数据记录器导入原始数据时经常出现的问题 温度记录仪设置为每十分钟记录一次温度 单独的气体记录仪设置为记录最后十分钟间隔内使用的气体 我想将这两个记录器的数据合并到一个数据框中进行绘图和分析 但时间并不完全一致 我希望每十分钟的时间段
  • picker输入字体或背景颜色

    我在闪亮的仪表板中使用 pickerInput 这很好 除了一个问题 背景颜色和字体颜色太相似 使得过滤器选择难以阅读 有什么办法可以改变背景或字体颜色吗 如果可能的话 我想继续使用 pickerInput 但如果有一个带有 selectI
  • 多个动态滤镜更新闪亮

    我希望能够让 UI 输入闪亮 并根据用户之前的选择进行自我更新 因此 在下面的示例中 预期的行为是用户选择cyl vsor carb那么这将 过滤数据集mtcars用于创建绘图 即用户根据过滤条件调整绘图并 更新其他过滤器中的剩余输入选择
  • R ggplot 中的柯尔莫哥洛夫-斯米尔诺夫图

    我正在尝试在 r 中绘制 KS 图 一切似乎都很顺利 除了我只能使用颜色来可视化两个不同的样本而不是线型这一事实 我已经尝试过以下方法 sample1 lt SD13009 sample2 lt SD13009PB group lt c r
  • sapply - 保留列名称

    我试图总结数据集中许多不同列 变量 的平均值 标准差等 我已经编写了自己的汇总函数 以准确返回我需要和正在使用的内容sapply立即将此函数应用于所有变量 它工作正常 但是返回的数据帧没有列名 我似乎甚至无法使用列号引用重命名它们 也就是说
  • 在 R 的 for 循环中创建动态命名对象并分配动态值

    我正在尝试创建一套动态命名的新对象 例如 temp2015 使用 for 循环 并存储动态值 具体来说 其他对象的名称 例如 Y2015 和 for 循环中使用的值 例如 2015 在动态命名的新对象中 我不确定为什么下面的代码不起作用 Y
  • 使用选定因子水平的值向 ggplot-barchart 添加水平线

    在这个情节中 df lt data frame factor as factor c rep A 3 rep B 3 Treatment c rep c A B C 2 values runif 6 0 1 ggplot df aes Tr
  • 从数据框中绘制多条平滑线

    我对 R 比较陌生 我正在尝试绘制从 csv 文件加载的数据框 数据由 6 列组成 如下所示 xval col1 col2 col3 col4 col5 第一列 xval 由一系列单调递增的正整数 例如 10 40 60 等 组成 其他列
  • 如何为自定义 S3 类实现提取/取子集 ([ [<-, [[ [[<-)] 函数?

    我有一个自定义的 S3 类foo 它在正常的基础上添加了一些自定义行为data frame foo object lt data frame class foo object lt c foo data frame 对于这个类 还应该有一个
  • 需要在R中跳过不同数量的行

    我正在使用以下代码来处理我的数据 但最近我意识到使用skip 27 在数据开始之前跳过存储在我的文件中的信息 不是一个好的选择 因为每个文件中要跳过的行数不同我的目标是读取存储在多个文件夹中的各种txt文件 并非所有文件都有相同的列数 列的

随机推荐

  • 从 VS 2015 和 EF7 的模型生成 SQLite 数据库

    我正在尝试利用 Entity Framework 7 和 SQLite 数据库文件制作 Windows Presenter Foundation 应用程序 我已经制作了 edmx 模型 但是当尝试生成模型时我无法建立 SQLite 连接 尝
  • 如何在百里香中转义双引号 " ?

    我想在 Thymeleaf 的字符串中添加双引号 我有以下形式的内容 td td 我想要的结果是 td Value of apple is 1 5 td 但我得到以下异常 EL1065E unexpected escape characte
  • z3 解数

    如何使用 z3 来计算解的数量 例如 我想证明对于任何n 方程组有 2 个解 x 2 1 y 1 1 y n 1 以下代码显示了给定的可满足性n 这不完全是我想要的 我想要任意的解决方案数量n usr bin env python from
  • 具有多个 Expects() 调用的 PHPUnit 模拟

    使用 PHPUnit 我想知道我们如何从同一个存根 模拟中获得多个期望 例如 我想测试模拟是否具有该方法display 调用并返回 NULL 我也想测试一下这个方法process 将被调用 事实上我的测试叫做testProcessIsCal
  • 选择元素的初始值

    我想初始化一个select具有初始值 我有一个从后端返回的 Json 对象 如下所示 Nom xxx TypeIld 1 Nom xxx TypeId 1 我有一个像这样声明的 typeId 数组 Nom Plats TypeId 0 No
  • 如何在 SwiftUI 中实现文本字段列表而不破坏删除

    When I 在 XCode 中创建主从应用程序 使用核心数据 向事件模型添加一个新字段 例如title as String 改变MasterView对此实施 struct MasterView View FetchRequest sort
  • SignInManager.PasswordSignInAsync 上“尚未为此 DbContext 配置数据库提供程序”

    Net Core 1 0 0 SDK 预览 2 x64 Net Core 1 0 0 VS 15 预览 2 x64 Net Core 1 0 0 运行时 x64 因此 我们将 RC1 应用程序更新到上述最新版本 经过几个小时的切换引用后 它
  • 在 GWT 超级开发模式下调试?

    到目前为止 在 GWT 超级开发模式下调试似乎真的很痛苦 如果有任何错误 则不会有堆栈跟踪 只有 Chrome 控制台中给出的神秘消息 有没有办法让所有错误打印堆栈跟踪 就像在开发模式下一样 我相信我已经有了源映射 因为如果我转到 Chro
  • Strapi V4 填充动态区域 媒体未填充

    通过使用下面建议的补丁 数据字段似乎填充正常 但是 媒体字段未填充 尝试了以下但没有运气 http localhost 1337 api pages populate protocol host port api pages populat
  • SwiftUI NavigationLink 自动弹出,这是意外的

    我在具有分割视图 横向 的 iPad 上使用 NavigationLink 时遇到一些问题 这是一个例子 这是重现该问题的代码 import SwiftUI final class MyEnvironmentObject Observabl
  • `if (isset($_SESSION))` 和 `if ($_SESSION)` 之间的区别?

    我注意到人们经常简单地写 当我一直在使用时 有人可以解释检查变量是否设置时的区别 这就是我使用它的目的 吗 在 PHP 中 如果变量不存在 未设置 那么 PHP 将输出一个E NOTICE错误 创建缺失的变量 并将其分配给NULL 如果您不
  • 删除所有列中具有相同值的行

    假设我有一个如下所示的数据框 df options stringsAsFactors F cars lt c Car1 Car2 Car3 Car4 Car5 Car6 Car7 Car8 Car9 test1 lt c 0 0 3 1 4
  • 在 Python3 和 Jupyter Notebook 中,“exit”关键字有什么作用?

    我目前在 Jupyter Notebook 中使用 Python3 我刚刚遇到了一个关键字exit 这个关键字有什么作用 with open some file txt as f for lines in f print lines exi
  • gson - 在序列化任何类型的对象时如何包含类名属性

    意识到在应用程序中序列化对象时 我需要将类名作为属性包含在内 如果我为序列化的任何非原始对象添加类名属性 这可能是最好的 我看到这是 Genson 的内置功能useClassMetadata方法 但我已经在我的项目中使用了 gson 所以如
  • 如何从数据缓冲区执行x86命令?

    我的问题主要是针对教授的 是关于以 奇怪 的方式使用 C 的 在 C 中 变量指针和函数指针之间并没有太大区别 我们可以像这样做一些无用的事情 char buff new char 32 void func void buff 但我们几乎创
  • jQuery 仅在表中突出显示选定的列

    我在上面看到这个帖子突出显示偶数列但我可以只突出显示选定的列吗 这是他们使用的代码 table Table22 gt tbody gt tr gt td nth child even css background blue 但我想 注意 c
  • 我应该如何处理“‘someFunction’不是从‘namespace:somePackage’导出的对象”错误? [关闭]

    Closed 这个问题需要调试细节 目前不接受答案 我有这个错误 someFunction 不是从 namespace somePackage 导出的对象 有谁知道如何解决它 一些原因 函数不再是包的一部分 请尝试 someFunction
  • 循环 uBlas 稀疏矩阵的非零元素

    我有以下稀疏矩阵 其中包含O N 元素 boost numeric ublas compressed matrix
  • c 中 printf 语句中的 %.#s 格式说明符

    请解释输出 什么是 s in printf mean include
  • 如何在R中生成自增ID

    我正在寻找一种有效的方法来为我生成的一些合成数据创建唯一的数字 ID 现在 我只有一个函数 它从全局变量中发出并递增一个值 请参见下面的演示代码 然而 这很混乱 因为我必须初始化idCounter变量 如果可能的话我宁愿不使用全局变量 Em