data.table v1.9.5 (R) 中 shift() 函数的奇怪行为

2024-02-14

我正在使用当前的开发版本data.table(v1.9.5),很大程度上是因为它拥有出色的内置功能shift()功能。

我注意到,当尝试将语句分组时data.table呼叫——其中之一是呼叫shift()--我从中得到了一些奇怪的行为:

library(data.table)

foo = data.table(x = c(1, 5, 6 ,2, 9, 8))

foo[, y := {
        delta = c(NA, diff(x));
        lag = shift(x, n = 1L, fill = NA);
        list(delta/lag)}]

上述尝试添加y抛出以下错误:

Error in delta/lag : non-numeric argument to binary operator

所以我通过创建来检查我得到了什么delta and lag根本不尝试与他们互动:

foo[, c('delta', 'lag') := 
      list(c(NA, diff(x)),
           shift(x, n = 1L, fill = NA))]
foo
   x delta               lag
1: 1   NA  NA, 1, 5, 6, 2, 9
2: 5    4  NA, 1, 5, 6, 2, 9
3: 6    1  NA, 1, 5, 6, 2, 9
4: 2   -4  NA, 1, 5, 6, 2, 9
5: 9    7  NA, 1, 5, 6, 2, 9
6: 8   -1  NA, 1, 5, 6, 2, 9

如果我将这些调用分开,我就可以得到我想要的:

foo[, delta := c(NA, diff(x))]
foo[, lag := shift(x, n = 1L, fill = NA)]

foo
   x delta lag
1: 1   NA   NA
2: 5    4    1
3: 6    1    5
4: 2   -4    6
5: 9    7    2
6: 8   -1    9

这是一个错误还是我在这里遗漏了一些东西?

编辑:正如帕斯卡指出的,我最初的示例中的错误是由于以下事实造成的:shift()返回一个列表。


随着最近在 v1.9.5 中提交 https://github.com/Rdatatable/data.table/commit/359ccf0ab6fa88f349c94a3cd54d0b88ff1568b1, shift()返回向量输入上的向量和length(n) == 1。也就是说,当answer is a list为方便起见,长度为 1,我们返回一个向量。这使我们能够:

DT[, col := shift(val, type = "lead")] # or "lag"

and

DT[, col := valA + shift(valB, type="lead")] # or "lag"

在这两种情况下,vector被返回并且RHS of :=当原子时,被包裹着list()内部为了方便,这给出了预期的行为。

这就关闭了#1127 https://github.com/Rdatatable/data.table/issues/1127.

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

data.table v1.9.5 (R) 中 shift() 函数的奇怪行为 的相关文章

  • 可以明确声明包依赖项的版本吗?

    我倾向于对我编写的代码进行明确而不是隐含的描述 因此 在成功创建自己的包之后 我立即想到的下一件事是如何最好地确保代码的健壮性和可靠性 其中一部分与我的包所依赖的包有关 实际问题 在这方面 是否可以明确声明需要 期望哪个版本的包依赖项 我正
  • 如果“testthat”测试在“R”中失败,则打印自定义诊断信息

    I use a testthat单元测试来检查是否data frame函数返回的结果与我期望它返回的结果相同 如果测试失败 testthat打印一些诊断信息 例如 MyFunction df orig is not identical to
  • 如何生成向量的所有组合[重复]

    这个问题在这里已经有答案了 假设我有 3 个绿球 2 个橙球和 8 个黄球 我想订购它们 鉴于所有相同颜色的球都是相同的 如何生成所有可能的序列 在 R 中 使用gregmisc 我可以 balls lt c orange orange g
  • R 中的 NA 替换函数

    我正在尝试替换矩阵中的 NA mat 零 我在用着mat is na mat lt 0 当我有 18946 个变量的 94531 个观察值或更小的矩阵时 效果很好 但我在 22752 个变量的 112039 个观察值的矩阵上尝试它 R 显示
  • 用于清除工作空间和转储存储的 R 全局函数

    我希望创建一个全局函数来清除我的工作区并转储我的内存 我将我的函数称为 cleaner 并希望它执行以下代码 remove list ls gc 我尝试在全局环境中创建该函数 但是当我运行它时 控制台仅打印该函数的文本 在我要获取的函数文件
  • 将 JSON URL 转换为 R 数据帧

    我在将 JSON 文件 从 API 转换为 R 中的数据帧时遇到问题 例如 URL 我尝试了 S O 的一些不同建议 包括将json数据转换为R中的数据框 https stackoverflow com questions 28683769
  • 使用底格里斯河从纬度/经度获取人口普查区

    我有相对较多的坐标 我想获取其人口普查区 除了 FIPS 代码 我知道我可以使用以下命令查找各个纬度 经度对call geolocator latlon 已完成here https stackoverflow com questions 5
  • R-了解 akima::interp 结果中的 NA 值

    我有以下数据框 ref dat k Intensity Slope 1 0 021467214 33 16 2 0 012444759 33 8 3 0 006079156 33 4 4 0 003792025 33 2 5 0 02276
  • 如何让R使用所有处理器?

    我有一台运行 Windows XP 的四核笔记本电脑 但查看任务管理器 R 似乎一次只使用一个处理器 如何让 R 使用全部四个处理器并加速我的 R 程序 我有一个基本系统 我使用它在 for 循环上并行化我的程序 一旦您了解需要做什么 此方
  • 如何在不循环的情况下添加组ID?

    我有数据框 例如 productid ordernum p1 10 p2 20 p3 30 p4 5 p5 20 p6 8 我想添加另一列 称为 groupid 它将产品按顺序分组在一起 一旦 sum ordernum 达到 30 分配一个
  • ggplot 中的错误问题:“grid.Call(”L_textBounds“, as.graphicsAnnot(x$label), x$x, x$y, … 中的错误”[重复]

    这个问题在这里已经有答案了 我试图在 ggplot 中制作一个条形图 其中我通过强制其中一些标签为长度为零的字符串 即 来指定要显示的标签 但是 我收到错误 Error in grid Call L textBounds as graphi
  • 使用 dplyr:group_by 将数据帧分成多个子集?

    有没有办法根据 group by 组使用 dplyr 将一个数据帧拆分为数据帧的子集 mtcars gt group by cyl gear gt codes 非常感谢 好吧 并不是你真的想要 但你可以这样做tidyr 即nearly一样的
  • 如何获得属于五分位数的x?

    我正在大学学习使用 R 进行计量经济学项目 所以请原谅我的笨拙 基本上 使用并给出 一个矩阵 股票价格 行 天 列 公司股票价格 另一个矩阵 市值 行 天 列 公司市值 我必须收集第三个矩阵每天观察的属于市值分布第一五分位数的股票价格 然后
  • 在 R 中绘制对数正态概率密度

    我正在尝试在 R 中生成对数正态概率密度图 其中包含 3 个不同的均值对数和标准差对数 我尝试了以下方法 但我的图表太丑了 看起来一点也不好看 x lt seq 0 10 length 100 a lt dlnorm x meanlog 0
  • 将数据从 R 导出到 Excel

    我试图将从 R 获得的一些结果导出到 Excel 中 但未成功 我尝试过以下代码 write table ALBERTA1 D ALBERTA1 txt sep t write csv ALBERTA1 ALBERTA1 csv your
  • 解析,用三点参数替换

    让我们考虑一个典型的deparse substitute R call f1 lt function u x y print deparse substitute x varU vu varX vx varY vy f1 u varU x
  • SQL 连接两个没有关系的表

    我有具有相同结构的不同表 我想通过其中一列将它们连接起来 问题是他们不共享该专栏中的信息 Table 1 Type A Name Value Table 2 Type B Name Value 结果表 在单列中 nameFromA name
  • 在 R 中使用 Huggingface Transformer 模型

    我正在尝试在 R 中使用不同的 Huggingface 模型 这是通过 reticulate 导入 Transformer 包来实现的 谢谢 https rpubs com eR ic transfoRmers https rpubs co
  • 16 位以上整数的计算

    我有两个大整数 两者都超过 16 位 确切地说是 20 位 而且我知道由于双精度浮点运算 我在使用这些数字进行计算甚至将它们存储在变量中 独立于编程语言 时受到限制 不过 我想也许gmp图书馆应该处理它们 但不幸的是它没有 可以计算更大的整
  • R 中的 Websocket

    我设法在 R 中建立到 Mtgox websocket 的连接 规格如下 url https socketio mtgox com mtgox Currency USD https socketio mtgox com mtgox Curr

随机推荐

  • 如何将ListView分成多个部分并加载?

    我想知道我该如何划分我的ListView分成几部分 当用户启动我的应用程序时仅显示其中的一部分 并在用户按下名为 加载更多项目 的按钮时显示其他部分 我有一个包含 500 多个项目的大列表 并考虑将其分成几个部分 以便可以快速加载 我想要类
  • JQuery Datepicker:如果所选日期是今天的日期

    我可以使用以下方法确定所选日期是否是过去的日期 var due date due date val if new Date due date getTime lt new Date getTime do stuff 这工作正常 我使用以下内
  • 标签栏内存管理

    一个基于选项卡栏的应用程序 具有 5 个选项卡切换选项 我该如何有效地管理内存 选项卡之间的切换非常频繁我如何管理这种情况 or 无论如何 所有选项卡都会保持活动状态 但这是一个糟糕的选择 请详细描述有关标签栏内存管理的信息 让 UIKit
  • 在 VBA Excel 中复制和粘贴循环以实现多个输出

    所以我有以下 Excel 选项卡 代码 1 代码 2 代码 3 LI 2015 2016 2017 2018 2019 2015 年输出等 对于 2015 年 我在 2015 选项卡中有一个表 其中包含 10 行 3 个代码及其各自的 值的
  • 在按钮上移动手指时更改 textView

    在我的应用程序中 我有一个 Activity 其中有 9 个按钮和 1 个按钮textView 我正在利用OnTouchListener更改中的文本textView当我在按钮上移动手指时 This is what my activity l
  • linux C++ 串口回显输出

    在我的程序中 将字节发送到串行端口 我收到发送的字节 我不想接收我发送的字节 并且我不知道该怎么做 include
  • 使用 iframe 的内容在页面上执行 jquery .click()

    如果可能的话 我可以单击 iframe 中的某个元素并让它在呈现它的页面上执行某个功能吗 例如 div class page the source will render div class clickme div 同时 回到主页 div
  • 调试 javascript 中的闭包

    当我尝试调试有很多闭包的 JavaScript 代码时 我会设置断点 然后我去看堆栈 但大多数时候我只看到一个充满匿名函数的调用堆栈 这对我来说是一场噩梦 在 javascript 中调试闭包的最佳方法是什么 您可以为回调函数添加名称 这样
  • UISearchDisplayController 的正确实例化

    我做了一些搜索 但答案仍然不清楚 我正在尝试在 TableViewController TVC 内创建 UISearchDisplayController 的实例 在我的 TVC 的标题中 我将 searchDisplayControlle
  • 如何完全关闭 TBB 代码中的线程

    注意 这不是重复的这个问题 https stackoverflow com questions 3786408 number of threads used by intel tbb 给定一个与 TBB 并行的复杂软件 我如何完全关闭线程
  • VS2010中的vcbuild在哪里?

    我已经升级到 VS2010 正在寻找 vbuild 可执行文件 对于 VS2008 它位于 C Program Files x86 Microsoft Visual Studio 9 0 VC vcpackages vcbuild exe
  • Git 说分支已合并,但显然不存在更改

    我已经让自己陷入了一种对我来说毫无意义的境地 我会尽力描述它 我有一个开发分支 我已通过以下方式将 master 合并到其中git checkout develpment git merge master 我在这里没有遇到任何合并冲突 有一
  • 用于查找最后一项小于或等于的函数,例如 lower_bound

    是否有一个使用二分搜索的函数 例如lower bound但这会返回last item 小于或等于根据给定的谓词 lower bound定义为 找到的位置first有序范围内具有值的元素大于或等于指定值 其中排序标准可以由二元谓词指定 and
  • 如何向 JavaFX 图表添加价值标记?

    我正在尝试使用 JavaFX 构建一个系列图表 其中数据是动态插入的 每次插入新值时 我想检查这是否是迄今为止的最高值 如果是 我想画一条水平线来显示这是最大值 在 JFree 图表中 我会使用 ValueMarker 但我正在尝试使用 J
  • Android 可以获取视频的分辨率吗?

    我正在寻找一种方法来获取 Android 中任何给定视频的分辨率 除了 Android 支持的格式之外 它不必支持其他格式 但如果能支持那就太好了 如果您不确定 Android 支持的格式 请参阅此页面 http developer and
  • Aerospike 中的关系

    我想知道如何表示关系Aerospike 我意识到这是一个键值存储 但是有一个可以给出的例子吗 例如 如果系统中有一个用户 并且我想获取与该用户关联的事物记录列表 几个简单的想法 1 让每个用户成为具有多个容器的记录 相当于传统 RDBMS
  • 使用 ios::binary 或 ios::out 或两者打开文件有什么区别?

    我试图找出打开文件之间的区别 例如 fstream fileName FILE dat ios binary or fstream fileName FILE dat ios out or fstream fileName FILE dat
  • CSS 模拟 Chrome 中的缩放

    我想模拟 Chrome 中的打印设置 比例 在 IE11 中 我添加了 css 这似乎修复了它 但在 Chrome 中却没有 page size A4 portrait margin 1mm 1mm 0 5mm 在 Chrome 中 我必须
  • ftplib连接SFTP服务器没有错误

    我前段时间创建了一个完整的FTP库 现在我想连接到 SFTP 服务器 据我在研究中发现 使用 ftplib 是不可能的 尽管如此 我尝试连接到仅限 SFTP 的服务器 它工作正常 没有任何问题 没有错误 也没有例外 现在我有点困惑 因为我不
  • data.table v1.9.5 (R) 中 shift() 函数的奇怪行为

    我正在使用当前的开发版本data table v1 9 5 很大程度上是因为它拥有出色的内置功能shift 功能 我注意到 当尝试将语句分组时data table呼叫 其中之一是呼叫shift 我从中得到了一些奇怪的行为 library d