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() 函数的奇怪行为 的相关文章

  • 如何使用 dplyr 的 filter() 和 R-base 的 ifelse() 过滤数据框?

    我的数据框df看起来像这样 Home Away Inning Boston NYC Top NYC Boston Bottom NYC Boston Top 我想使用 dplyr 的filter 制作一个数据框 从ifelse query
  • (function (..., row.names = NULL, check.rows = FALSE, check.names = TRUE, : 参数暗示不同的行数: 1, 4, 5, 2

    我是 R 的初学者 我希望你能帮助我解决我的问题 我的数据集中的文件名包含大量信息 我必须提取这些信息来创建单独的变量 首先我使用 splits lt t as data frame strsplit as character rawdat
  • 使用plot(...,add=T) 叠加栅格图会导致最终图任意错位

    我发现 当我尝试使用plot add T 叠加多个栅格时 如果我尝试将超过3 个栅格叠加在一起 则后续图不会正确对齐栅格 我的初衷是创建一个模拟土地覆盖的分类地图 其中代表覆盖类别的颜色深浅随着我们模型投影的确定性而变化 为此 我创建了一个
  • a * b * y 中的错误:不一致的数组[关闭]

    Closed 这个问题需要调试细节 help minimal reproducible example 目前不接受答案 Cold lt matrix c 1 89 3 76 2 47 4 76 2 2 byrow TRUE X lt mat
  • 使用 R 将多个数据帧写入 .csv 文件

    我使用 lapply 将函数应用于多个数据框 data cleaned lt lapply data list shooter cleaning 然后根据主题编号 例如 100 标记列表中每个结果数据帧 names data cleaned
  • 如果包已经加载,那么在函数中需要包会有什么影响?

    加入有没有什么不良影响library require函数内的语句会被频繁调用吗 所用的时间似乎可以忽略不计 但我每隔几分钟调用该函数 我想知道重复是否有任何缺点require calls 请注意 该功能只是个人实用程序 不被共享 即 我是唯
  • 调整 R 图的边距

    我对调整 R 图的边距很感兴趣 我在 MacOS 上使用 R Studio 在 2013 intel CPU Macbook pro 上运行 这是我用于生成绘图的数据 spins lt runif 50 min 0 max 50 这是我用来
  • 如何在 R 中编写 csv 文件,其中我的输入作为行写入文件?

    这是一个非常简单的问题 令我惊讶的是网上没有例子 我有一个向量 vector lt c 1 1 1 1 1 我想将其写为 csv 作为一个简单的行 write csv vector file myfile csv row names FAL
  • R 中的闭包类似于 Python

    首先考虑以下 Python 代码 该代码计算函数被调用的次数 def counter fn count 0 def inner args kwargs nonlocal count count 1 print Function 0 was
  • 如何将管道链 (magrittr) 的结果提供给对象

    这是一个相当简单的问题 但我无法通过 google stackexchange 找到答案并查看 magrittr 的文档 如何提供通过 gt 连接的函数链的结果来创建向量 我看到大多数人做的是 a lt data frame x c 1 3
  • xts 函数不将我的 POSIXct 日期视为适当的基于时间的对象

    我创建了一个包含两列的数据框 gt head data frame Date Rainfall 1 1992 01 06 14 00 00 0 3 2 1992 01 06 15 00 00 0 2 3 1992 01 06 16 00 0
  • 如何在Shiny中默认选择verbatimTextOutput中的文本?

    这是与我之前的问题相关的问题 是否可以有固定宽度的 verbatimTextOutput 并让文本在 Shiny 中换行 https stackoverflow com q 58516071 7669809 我有以下闪亮的应用程序 http
  • R 因子变量之间的相关性

    我想知道是否有一种简单的方法来识别与另一个变量 100 相关的特征 因子变量 因此 在示例中 该过程将匹配 颜色 和 车辆 以及 植物 和 高度 color lt c black black blue blue yellow vehicle
  • 按月/年间隔汇总每日数据

    我并不经常需要在 R 中处理日期 但我认为这相当简单 我有一列代表数据框中的日期 我只想创建一个新的数据框 使用日期按月 年总结第二列 最好的方法是什么 我想要第二个数据框 这样我就可以将它提供给绘图 您能提供的任何帮助将不胜感激 编辑 供
  • 在字符串中每个字母后面添加数字

    我有几个具有固定格式的字符串 格式为一个字母后跟一个数字 例如 A3B1C7D1 但是 如果字母后面的数字为 1 则字符串将写为 A3BC7D 我想做的是插入数字 1 然后将字符串转换为A3BC7D to A3B1C7D1 我的示例数据是
  • R Markdown / Bookdown 中的水平规则导致错误

    突然 我在 Markdown Bookdown 中编织为 PDF 时遇到错误 我的系统没有任何变化 该错误是由 水平规则 引起的 即 Markdown 中的任意位置 或 尽管两侧都有行空格 我提供了一个简单的违规示例 它不会合并成 PDF
  • R 控制台是我的母语,如何将 R 设置为英语?

    我在 Windows 7 上使用 R 显然 R 不知何故发现了我说英语以外的语言的证据 并且顽固地坚持在控制台中以我自己的语言提供输出 由于多种原因 这是不可取的 我希望 R 是英语 什么有效 我能够使用LANGUAGE en作为 R 控制
  • 按行重塑矩阵

    我有一个大小为 18000 x 54 的矩阵 我想将其重塑为大小为 54000 x 18 的矩阵 其中初始矩阵的每一行都变成一个有 3 行的矩阵 让我们举个例子 我有一个矩阵如下 a matrix 1 18 nrow 2 ncol 9 by
  • ggplot:按组自动化的百分位线

    我找到了dplyr gt 运算符有助于简单的 ggplot2 转换 无需求助于ggproto 这是必需的ggplot2 扩展 http docs ggplot2 org dev vignettes extending ggplot2 htm
  • 反转默认比例梯度ggplot2

    我是新手 我正在尝试设计热图 这是我的代码 ggplot gd aes Qcountry Q6 1 Q6d order TRUE geom tile aes fill prob colour white theme minimal labs

随机推荐

  • 如何将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