knitr 被 data.table `:=` 赋值欺骗

2024-01-12

看起来knitr不明白DT[, a:=1]不应导致输出DT到文档。有办法阻止这种行为吗?

Example knitr文档:

Data.Table Markdown
========================================================
Suppose we make a `data.table` in **R Markdown**
```{r}
DT = data.table(a = rnorm(10))
```
Notice that it doesn't display the contents until we do a
```{r}
DT
```
style command.  However, if we want to use `:=` to create another column
```{r}
DT[, c:=5]
```
It would appear that the absence of a equals sign tricks `knitr` into thinking this 
is to be printed.

针织产量:

这是一个knitr错误或data.table bug?

EDIT

我才刚刚注意到,knitr当它是的时候很奇怪echo荷兰国际集团的代码。查看上面的输出。在我的源代码中我有DT[, c:=5]但是什么knitr呈现的是

DT[, `:=`(c, 5)]

Weird...

编辑2:缓存

缓存似乎也有问题:=但这一定是不同的原因,所以这里有一个单独的问题:为什么 data.table `:=` 的 knit 缓存失败? https://stackoverflow.com/q/15298359/1900520


2014 年 10 月更新。现在在 data.table v1.9.5 中:

:=不再打印knitr为了与提示时的行为保持一致,#505 https://github.com/Rdatatable/data.table/issues/505。测试输出knit("knitr.Rmd")现在处于 data.table 的单元测试中。

和相关:

if (TRUE) DT[,LHS:=RHS]现在不打印(感谢 Jureiss,#869 https://github.com/Rdatatable/data.table/issues/869)。已添加测试。为了让它发挥作用,我们不得不忍受一个缺点:如果:=在函数内部使用,没有DT[]在函数结束之前,然后在下一次DT在提示符下输入,不会打印任何内容。重复的一个DT将打印。为了避免这种情况:包括一个DT[]最后一次之后:=在你的函数中。如果这是不可能的(例如,它不是您可以更改的功能),那么print(DT) and DT[]在提示符下保证打印。和以前一样,添加一个额外的[]在 a 的末尾:=查询是建议更新然后打印的习惯用法;例如> DT[,foo:=3L][]



以前的答案为后代保留(global$depthtrigger从 data.table v1.9.5 开始,业务不再完成,所以这不再是事实)...

只是为了清楚我的理解:knitr当您不希望打印时正在打印。

尝试增加data.table:::.global$depthtrigger脚本开头的一点点。

目前您的数量为 3:

data.table:::.global$depthtrigger
[1] 3

我不知道评估深度是多少knitr添加到堆栈中。但先尝试将触发器更改为4; IE。

assign("depthtrigger", 4, data.table:::.global)

并在结束时knitr脚本确保将其设置回 3。如果 4 不起作用,请尝试 5,然后尝试 6。如果达到 10,请放弃,我会再考虑一下。 ;-P

为什么这可能有效?

请参阅 v1.8.4 的新闻:

DT[,LHS:=RHS,...]不再打印DT。这实现了#2128“尝试 再次得到DT[i,j:=value]无形地返回”。感谢这里的讨论:
在 v1.8.3 之前,如何在 R {data.table} 中使用 `:=` 时抑制输出? https://stackoverflow.com/questions/11359553/how-to-suppress-output-when-using-in-r-data-table
http://r.789695.n4.nabble.com/Avoiding-print-when-using-tp4643076.html http://r.789695.n4.nabble.com/Avoiding-print-when-using-tp4643076.html
常见问题解答 2.21 和 2.22 已更新。

FAQ 2.21 为什么DT[i,col:=value]返回整个DT?我期望没有可见的值(与
这在 v1.8.3 中发生了变化 以满足您的期望。请升级。返回整个 DT (现在不可见)以便复合语法可以工作;例如。, DT[i,完成:=TRUE][,总和(完成)]。返回更新的行数 当详细程度打开时,无论是基于每个查询还是全局使用 选项(datatable.verbose=TRUE)。

常见问题解答 2.22 好的,谢谢。 DT[i,col:=value] 隐形返回结果有什么难的?
R 内力 [ 的可见性。 FunTab 的 eval 列的值(请参阅 src/main/names.c) for [ 为 0 表示强制 R_Visible 打开(请参阅 R-内部结构第 1.6 节)。因此,当我们尝试看不见()或 自己直接将R_Visible设置为0,在src/main/eval.c中进行eval 会再次强制它打开。要解决这个问题,关键是要停止 尝试在 := 之后停止运行 print 方法。相反,在 := 里面 我们现在(从 v1.8.3 开始)设置一个全局标志, print 方法使用它来 知道是否实际打印。

该全球标志是data.table:::.global$print。在顶端data.table:::print.data.table你看着它就会看到它。那是因为没有已知的方法来抑制打印[(如常见问题解答 2.22 所解释)。

所以,里面:= inside [.data.table看起来这个调用有多“深”:

if (Cstack_info()[["eval_depth"]] <= .global$depthtrigger) {
    suppPrint = function(x) { .global$print=FALSE; x }
    # Suppress print when returns ok not on error, bug #2376.
    # Thanks to: https://stackoverflow.com/a/13606880/403310
    # All appropriate returns following this point are
    # wrapped i.e. return(suppPrint(x)).
}

本质就是说:如果DT[,x:=y]在提示符下运行,然后我知道 REPL 将调用print对我的结果的方法超出了我的控制范围。好吧,既然如此print方法将要运行,我将把它抑制在里面print方法通过设置一个标志(因为print运行的方法(即print.data.table)是我可以控制的)。

In knitr在这个例子中,它以一种巧妙的方式模拟 REPL。这不是一个真正的脚本,iiuc,否则DT[,x:=y]由于这个原因无论如何都不会打印。但因为它是通过一个模拟 REPLeval还有一个额外的级别eval代码运行深度knitr。或者类似的东西(我不知道knitr).

这就是为什么我正在考虑增加depthtrigger可能会成功。

哈克/粗俗,我同意。但如果它有效,并且你让我知道哪个值有效,我可以改变data.table to be knitr意识到并改变depthtrigger自动地。或者任何更好的解决方案都是最受欢迎的。

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

knitr 被 data.table `:=` 赋值欺骗 的相关文章

  • `dplyr::_join` 函数的命名向量“by”参数[重复]

    这个问题在这里已经有答案了 我正在写一个函数dplyr join两个数据框by不同的列 第一个数据帧的列名称动态指定为函数参数 我相信我需要使用rlang准引用 元编程 但未能找到可行的解决方案 我很感激任何建议 library dplyr
  • 闪亮的应用程序包:css 和所有 www/ 目录内容

    我正在尝试将 Shiny 应用程序转换为 R 包 但我在处理有关 www 目录以及 松散 文件的所有问题时遇到了问题 我闪亮的应用程序运行得很好 但是当我尝试 打包它 时 它不起作用 我闪亮的应用程序目录 my shiny app R ut
  • R - 重塑 - 熔化错误

    我正在尝试融化数据框 但出现了这个奇怪的错误 有什么想法吗 str zx7 data frame 519 obs of 5 variables calday new Date format 2011 01 03 2011 01 04 201
  • 在 Shiny 中显示反应式 htmlTable 表格

    我正在制作我的第一个 Shiny 应用程序 但找不到任何有关如何显示使用 htmlTable 包创建的表格的示例 我基本上想在按下按钮时创建一个表格并显示它 Shiny 显示 html 代码而不是表格 我不知道用什么替换服务器部分中的 re
  • 如何按定义的顺序将图像合并到一个文件中

    我有大约 100 张图像 png 我不想手动执行此操作 而是希望将它们按照定义的顺序 基于文件名 并排放置在一个 pdf 中 每行 12 个图像 有人有什么建议吗 我按照下面托马斯告诉我的方法尝试了 它把它们贴在旁边有一个黑边 我怎样才能去
  • 在 R 中提取 data.frames 列表的名称以及 data.frame 中的值

    在下面的代码中 j是 data frames 的命名列表 我想知道是否有办法 a 提取变量的数值 即one short and one long 在 data frames 内并附加它们的相关名称 即 AAA or BBB or CCC 到
  • 在包加载之前如何知道 R 中特定函数属于哪个包?

    例如 我知道许多流行的功能 例如tbl df 我通常不记得它属于哪个包 即data table or dplyr 所以我必须始终记住并加载一个包 但我做不到 tbl df除非我加载了正确的包 在 R 控制台本身加载或安装包之前 有没有办法知
  • R:按组,测试一个变量的每个值是否存在于另一个变量中

    我有一个数据框架 结构如下 a lt c 1 1 1 2 2 2 3 3 3 3 4 4 b lt c 1 2 3 1 2 3 1 2 3 4 1 2 c lt c NA NA 2 NA 1 1 NA NA 1 1 NA NA df lt
  • 增加雷达图中长轴标签的空间

    我想创建一个雷达图ggirahExtra ggRadar 问题是我的标签很长并且被剪掉了 我想我可以通过添加在标签和绘图之间创建更多空间margin margin 0 0 2 0 cm to element text in axis tex
  • C# 数据表更新多行

    我如何使用数据表进行多次更新 我找到了这个更新 1 行 http support microsoft com kb 307587 my code public void ExportCSV string SQLSyntax string L
  • R中IF函数的使用

    我正在短跑ifR 中的函数 但收到以下警告消息 In if runif 50 0 1 lt 0 69 the condition has length gt 1 and only the first element will be used
  • 如何为自定义 S3 类实现提取/取子集 ([ [<-, [[ [[<-)] 函数?

    我有一个自定义的 S3 类foo 它在正常的基础上添加了一些自定义行为data frame foo object lt data frame class foo object lt c foo data frame 对于这个类 还应该有一个
  • 将维基百科中的表格加载到 R 中

    我正在尝试从以下 URL 将最高法院法官表加载到 R 中 https en wikipedia org wiki List of Justices of the Supreme Court of the United States http
  • 如何动态地将 sliderInput 添加到闪亮的应用程序中?

    使用闪亮 我上传一个 csv 文件 并根据列名称 我需要向 ui 添加滑块 sidebarPanel fileInput file1 Upload CSV File to Create a Model accept c text csv t
  • 如何将旋转的 NetCDF 转换回正常的纬度/经度网格?

    我有一个带有旋转坐标的 NetCDF 文件 我需要将其转换为正常的纬度 经度坐标 经度为 180到180 纬度为 90到90 library ncdf4 nc open dat nf 对于尺寸 它显示 1 5 variables exclu
  • 自定义轴缩放后 ggplot2 缺少标签

    我正在尝试使用我的 x 轴应用自定义缩放ggplot2 and scales trans new 但是 当我这样做时 一些轴标签丢失了 有人可以帮我弄清楚为什么吗 Setup library tidyverse the data ds lt
  • 我如何查看 quantmod 包中所有可用的数据系列?

    如何显示可用的所有报价 数据系列的列表 例如使用雅虎的 getSymbols 我不知道有什么办法 TTR包有一个功能 stockSymbols 下载 NYSE AMEX 和 NASDAQ 的所有当前代码 它试图将它们采用雅虎可接受的格式 但
  • 条件和分组 mutate dplyr

    假设我有以下每个抽屉库存增加的数据 gt socks year drawer nbr sock total 1990 1 2 1991 1 2 1990 2 3 1991 2 4 1990 3 2 1991 3 1 我想要一个二进制变量来标
  • 使用data.table进行聚合

    经过 SO 用户的多次建议后 我终于尝试将我的代码转换为使用data table library data table DT lt data table plate paste0 plate rep 1 2 each 5 id rep c
  • 闪亮井板宽度

    library shiny library shinydashboard ui lt dashboardPage dashboardHeader dashboardSidebar dashboardBody wellPanel tags d

随机推荐

  • 使用python提取一个句子

    如果该句子中存在特定单词 我想提取确切的句子 谁能告诉我如何用 python 做到这一点 我使用了 concordance 但它只打印单词匹配的行 快速提醒一下 断句实际上是一件非常复杂的事情 句号规则也有例外 例如 先生 或 博士 还有各
  • AttributeError:“KMeans”对象没有属性“inertia_”

    from sklearn cluster import KMeans import numpy import pandas as pd from pandas import read csv boston read csv desktop
  • 计算两个点阵列之间的成对角度矩阵

    我有两个点向量 x and y 成形 n p and m p 分别 举个例子 x np array 0 0 16341 0 98656 0 05937 0 25205 0 96589 0 05937 0 25205 0 96589 0 11
  • 在函数 (group_by) 中使用 dplyr 时出现问题

    我想使用 dplyr 进行一些数据操作 背景 我有一个调查权重和一堆变量 主要是李克特项目 我想对有和没有调查权重的每个类别的频率和百分比进行求和 举个例子 让我们只使用性别变量的频率 结果应该是这样的 gender freq freq w
  • 哪个 .NET 库具有写时复制集合?

    我正在搜索要在 C 程序中使用的 NET 写时复制集合 例如列表 字典等 哪些集合具有该属性 包括参考FSharp Core 然后你就可以访问多种不可变的集合 Set List Map etc 这些位于Microsoft FSharp Co
  • 如何在 Google Test 中使用不同模板测试多个模板类的相同行为?

    我正在练习 C 17 中的排序算法 并按如下方式实现了我的单元测试 以下编译和所有测试都是绿色的 template
  • Funq IoC 容器是否支持属性注入?

    我正在寻找一个 IoC 容器在我的 Compact Framework 应用程序中使用 尝试 Funq 我发现我找不到用它进行属性注入的方法 我浏览了该项目网站上的讨论及其单元测试 但我找不到任何属性注入的示例 Funq 支持属性注入吗 嗯
  • Django 迁移到新数据库

    我刚刚加入一个使用 Django 的项目 并尝试初始化我自己的开发服务器 当我尝试这样做时 我的一个应用程序的迁移失败 此应用程序的模型有一个 sorl thumbnail ImageField 用于添加徽标 尝试迁移时 我收到以下错误消息
  • [over.load]/1 中下面突出显示的句子是什么意思?

    下面突出显示的句子的含义是什么 它与函数模板有什么关系吗 过载 1 http eel is c draft over load 1 并非所有函数声明都可以重载 那些不能成为的 此处指定了重载 如果程序包含以下内容 则该程序是格式错误的 同一
  • ::after 伪元素出现在之前

    我试图在渐变的顶部和底部创建一个微妙的波浪 但是 after 伪元素出现在主要内容之前而不是之后 目前它显示为 before after 主要内容 但我希望它显示为 before 主要内容 after 这是我的代码 gradient bac
  • couchDB、python 和身份验证

    我已经安装了 couchDB v 0 10 0 并尝试通过从 couchDB wiki 下载的 Couch 类中的 python 与它对话 问题是 Create database mydb error unauthorized reason
  • 对“omp_get_max_threads_”的未定义引用

    我在尝试编译项目时遇到以下错误 fortran 使用 gfortran 对 omp get max threads 的未定义引用 对 omp get thread num 的未定义引用 问题是 我的 GCC 版本是 4 4 3 它应该支持
  • 运行 Julia .jl 文件

    我是朱莉娅的新手 刚刚完成了我的第一个程序 我在 julia studio 中编写了代码 并在该程序中对其进行了测试 它为我提供了所有正确的输出 但 shell 将输出分开 就好像它是两个不同的执行一样 我想知道这是否是我的编译器的问题 所
  • R ggplot2 对只有几个数据点的线图进行轻微平滑

    不确定这是否是一个编程问题 如果我有下面的数据 它会生成一个 尖峰 图表 并且我想使用 ggplot2 生成一个稍微平滑的图表 我该如何最优雅地处理它 通常的平滑方法去除了太多信息 我正在考虑的一种方法是在当前数据集之间插入额外的两个数据点
  • 使用空手道框架时,如何有选择地忽略构建中的某些 .feature 文件?

    我必须忽略使用空手道框架的集成测试套件的某些 feature 测试文件 有什么方法可以有选择地排除某些文件 是的 答案是tags https github com intuit karate test suites Example igno
  • 制作Asus google Nexus 7的模拟器

    我有 android sdk 更新到最新版本 v21 现在我想要的是 制作 Asus google Nexus 7 的模拟器 包含 800 x 1280 分辨率和 216 dpi 当我将 sdk 更新到最新版本时 我无法编辑模拟器当前的 d
  • JSP 自定义标记中的 i18n 翻译

    是否可以编写自定义 JSP 标记来获取 i18n 消息键并输出给定 请求的翻译短语 通常在 JSP JSTL 中 我这样做
  • Google Spell API 和 TinyMCE

    我刚刚使用说明成功实现了 TinyMCE 的拼写检查插件here http ondotnet deap nu 2009 01 implementing tinymce spellchecker with html 不过 我对这个结尾段落感到
  • 在泛型类中使用泛型协议

    我定义了一个协议LLNodeType protocol LLNodeType typealias T var firstNode LLNode
  • knitr 被 data.table `:=` 赋值欺骗

    看起来knitr不明白DT a 1 不应导致输出DT到文档 有办法阻止这种行为吗 Example knitr文档 Data Table Markdown Suppose we make a data table in R Markdown