小编use*_*473的帖子

强制 R 始终在错误消息中显示包名称

我有时会加载多个导出同名函数的包。比如Hmisc和dplyr都有一个summarize函数,我有时会同时加载两个包。然后我打电话summarize,认为我在打电话dplyr::summarize时我真的在打电话Hmisc::summarize。发生这种情况时,我会收到如下错误消息:

Error in summarize(., mean = mean(instRating)) : 
  argument "by" is missing, with no default
Run Code Online (Sandbox Code Playgroud)

该消息最初难以理解,因为我的代码不包含任何错误。我花了一分钟才意识到我调用了错误包中的函数。如果第一行包含相关包的名称,错误消息会更容易理解:

Error in Hmisc::summarize(., mean = mean(instRating)) : 
Run Code Online (Sandbox Code Playgroud)

有没有办法强制 R 在这些错误消息中显示包名称?

我知道我可以通过输入dplyr::summarize或更改加载包的顺序来解决这个问题。但我的兴趣在于向 R 的错误消息添加细节。

error-handling r package

19
推荐指数
1
解决办法
376
查看次数

R Markdown:抑制特定引用中的括号

我有一个 R Markdown 文档,其中包含一些引文。我使用默认的引用样式,通常对我来说效果很好。但我有一些句子放在括号内,在这些句子中,我想引用作品而不添加第二组括号。也就是说,我想隐藏通常在引文中出版年份左右出现的括号。这是我尝试创建的输出的示例:

Lorem ipsum dolor. (Fourscore and seven years ago: see Smith 2020.)
Run Code Online (Sandbox Code Playgroud)

其中Smith 2020是用 R Markdown 引用生成的,例如@Smith_2020. 在 LaTeX 中,这种事情可以通过\citealp“natbib”包中的宏来完成。也可以使用该包\citeauthor\citeyear宏来完成,它们分别列出作者姓名和出版年份。R Markdown 中有等效功能吗?


为了进一步说明问题,这里有一个最小的工作示例。假设“myBib.bib”是

@BOOK{Smith_2020,
  AUTHOR       = {John Smith},
  TITLE        = {Some Title},
  YEAR         = {2020},
  PUBLISHER    = {Knopf},
  address      = {New York, NY},
}
Run Code Online (Sandbox Code Playgroud)

我有这个 Rmd 文件:

---
output: html_document
bibliography: 'myBib.bib'
---

(See @Smith_2020 for details.)
Run Code Online (Sandbox Code Playgroud)

输出是(See Smith (2020) for details.)我想消除 周围的括号2020。一种方法是将整个句子放在括号内:例如, …

r citations r-markdown pandoc-citeproc

13
推荐指数
1
解决办法
2851
查看次数

更改默认环境以分配新变量

我经常想在全局环境下的环境中创建许多变量.这可以通过envir参数轻松完成sys.source- 如果由文件创建的所有变量都应该进入单个环境.

但我通常使用一个创建变量集的文件.一组应该进入一个环境,另一组进入另一个环境,依此类推.我不想将此文件拆分为多个文件,然后进行多次调用sys.source.

相反,我想要一个命令,让我更改默认环境以分配新变量.例如:

e <- new.env()
setDefaultEnvironment(e)
tmp <- 2
e$tmp           #  2 
.GlobalEnv$tmp  #  Error: object 'tmp' not found
Run Code Online (Sandbox Code Playgroud)

但这setDefaultEnvironment不是一个真正的命令.

在R中有没有安全的方法来做这种事情?

r

10
推荐指数
3
解决办法
4835
查看次数

在公式中扩展因子相互作用

我有很多形式(类formula或类Formula)y ~ a*b,其中ab是因素.

我需要编写一个函数,该函数采用这样的公式并返回一个公式,其中交互中的所有项都是"拼写出来的".这是一个例子:

fac1 <- factor(c('a', 'a', 'b', 'b'))
fac2 <- factor(c('c', 'd', 'c', 'd'))
BigFormula(formula(x ~ fac1*fac2))
Run Code Online (Sandbox Code Playgroud)

哪里有BigFormula回报formula(x ~ a + b + c + d + a:c + a:d + b:c + b:d).

有一个简单的方法吗?

(上下文:我正在运行窗体中的许多命令anova(mod1, mod2),其中mod2嵌套mod1,两个模型的右侧都包含类似的术语fac1*fac2.这些命令的要点是计算F统计量.问题是anova对待fac1*fac2三个变量,即使它通常代表三个以上的变量.(例如,在上面的代码中,fac1*fac2代表八个变量.)因此,anova低估了嵌套模型中的限制数量,并且高估了我的自由度.)

r

8
推荐指数
2
解决办法
3192
查看次数

投影仪:不增加“完全受限”帧的帧号

我的文档通常包含这种形式的“完全受限”框架:

\begin{frame}<0>
    Lorem ipsum dolor.
\end{frame}
Run Code Online (Sandbox Code Playgroud)

由于第一行末尾的 <0>,这样的框架不会出现在我用 pdflatex 或 xelatex 生成的文档中。但它们仍然会导致帧数计数器增加,从而导致奇怪的结果。这是一个例子:

\documentclass[xelatex]{beamer}
\begin{document}
  \setbeamertemplate{footline}{\hfill\insertframenumber}
  \begin{frame}<0>{Frame A}
  \end{frame}

  \begin{frame}{Frame B}
  \end{frame}

\end{document}
Run Code Online (Sandbox Code Playgroud)

当我使用 xelatex 处理该文档时,我得到一个包含一帧的 PDF 文档。帧脚线中的帧编号是 2。我希望它是 1。我可以在每个受限帧之后手动重置帧计数器,但在具有许多此类帧的大型文档中,这是一个麻烦。有什么方法可以阻止受限帧增加计数器吗?

latex beamer

5
推荐指数
1
解决办法
4510
查看次数

在使用 lm() 时控制交互项中虚拟变量的值(TRUE 或 FALSE)

当我估计一个模型,它在两个变量之间存在交互作用,而这些变量不作为独立变量进入模型,并且当这些变量之一是虚拟(“逻辑”类)变量时,R 会“翻转虚拟变量的符号” . 也就是说,当虚拟变量为 FALSE 时,它报告交互项系数的估计,而不是当它为 TRUE 时。下面是一个例子:

data(trees)
trees$dHeight <- trees$Height > 76
trees$cGirth  <- trees$Girth - mean(trees$Girth)
lm(Volume ~ Girth +  Girth:dHeight, data = trees)  # estimate is for  Girth:dHeightTRUE
lm(Volume ~ Girth + cGirth:dHeight, data = trees)  # estimate is for cGirth:dHeightFALSE    
Run Code Online (Sandbox Code Playgroud)

为什么最后一行中的回归对交互作用的估计dHeight是 FALSE 而不是 TRUE?(当 dHeight 为 TRUE 时,我希望 R 报告估计值。)

这不是一个大问题,但我想更好地理解为什么 R 正在做它正在做的事情。我知道relevel()contrasts(),但我看不出它们在这里会有所作为。

r

5
推荐指数
1
解决办法
2218
查看次数

当“self_contained”为 FALSE 时,R 笔记本无法正确渲染,因为“files”目录在渲染后被删除

有时需要创建一个非独立的 R 笔记本。例如,人们可能想要从自己选择​​的本地文件加载 Mathjax,为此,self_contained必须是FALSE. 但我发现,默认情况下,当 YAML 标头包含self_contained: FALSE. 这是一个最小的例子:

---
title: "Notebook, not self-contained"
output: 
  html_notebook:
    self_contained: false    
---

Hello.
Run Code Online (Sandbox Code Playgroud)

当使用默认选项渲染此文件时rmarkdown::render()- 或者当我通过将其保存在 RStudio 中“预览”笔记本时 - 生成的 HTML 文件不使用默认的 R Notebook CSS,并且顶部有很多麻烦文件,如相关帖子所示。问题似乎是,默认情况下,rmarkdown::render()使用clean = TRUE-- 对于 R 笔记本,这意味着包含所有依赖项(jquery、bootstrap 等)的外部目录一旦创建就会被销毁。例如,如果上面的文件标题为“myNotebook.Rmd”,则使用rmarkdown::render()默认选项调用将创建一个myNotebook_files包含依赖项的目录,并且几乎会立即删除该目录。

rmarkdown::render()如果您使用调用,问题就会消失clean = TRUE。但这个解决方案并不是最佳的。它将 .md 文件留在我想删除的输出目录中。而且它不能与用于编织或预览笔记本的 RStudio 快捷方式一起使用。

有什么方法可以更改 的默认clean = TRUE行为,以便在设置rmarkdown::render()为 时不会删除“_files”目录?self_containedFALSE

奇怪的是,只有当输出格式设置为html_notebook- 而不是设置为 …

r knitr r-markdown rnotebook

5
推荐指数
0
解决办法
1164
查看次数

R Markdown 文档中 YAML 列表的处理不一致(与 LaTeX 包的加载相关)

我想使用 R Markdown 生成一个利用某些 LaTeX 包的文档。有时,我想将 Rmd 文档渲染为 PDF。有时,我想将其呈现为 HTML。

我想通过extra_dependencies选项加载包,而不是通过includesheader-includes选项。一些 LaTeX 包应该加载选项。其他人不应该这样。

当我将 Rmd 文档渲染为 PDF 时,没有问题。但是,当我尝试将同一文档呈现为 HTML 时,参数rmarkdown::render的处理会出现问题extra_dependencies(我使用的是 rmarkdown 2.1。)这是一个最小的示例,遵循R Markdown Cookbook的风格:

---
title: "Test Processing of YAML Header in R Markdown Document"
output: 
  html_document:
    extra_dependencies:
      array: null
      numprint: ["autolanguage"]
---

Hello.
Run Code Online (Sandbox Code Playgroud)

渲染该文档会rmarkdown::render生成dependency_resolver -> <Anonymous> -> sapply -> lapply错误。array如果我在和之前添加破折号numprint,则会出现错误Error: invalid version specification 'NULL'。但如果我直接改成html_documentpdf_document …

latex yaml r-markdown

5
推荐指数
1
解决办法
896
查看次数

渲染 R Markdown 文档后在 RStudio 中查看警告

我经常在 RStudio 中编写 R Markdown 文档。也就是说,我单击“Knit”图标或使用键盘快捷键来让我的文档由rmarkdown::render(). 有时,当我这样做时,R Markdown 窗格中的输出会以类似以下的消息结束:

Output created: myDoc.html
There were 15 warnings (use warnings() to see them)
Run Code Online (Sandbox Code Playgroud)

我如何查看这些警告?我希望在 R Markdown 窗格的输出中看到它们,或者通过warnings()在控制台中键入——或者理想情况下,两种方式都可以。

当然,如果我rmarkdown::render('myDoc.Rmd')在控制台中运行而不是使用 RStudio 快捷方式,我就可以看到它们。但这种方法很不方便。我也不想修改单个代码块的选项。

大约四年前出现了一个非常类似的问题,但没有发布解决方案。

r knitr r-markdown

5
推荐指数
1
解决办法
656
查看次数

为什么 sapply() 和 options() “不受欢迎”?

Jim Hester 的“lintr”包包含许多不同的 R linter。该README以这种方式描述了其中一个linter :

undesirable_function_linter: 报告不受欢迎的功能的使用,例如选项或 sapply 并提出替代方案。

我很惊讶。我一直在使用的R用很多年了,我一直在使用options(),并sapply()多年。是什么让他们不受欢迎?还有更好的选择吗?

我知道getOption(),但它不能代替options()。我还了解*apply()变体Map()、 和 Tidyversemap函数。总体而言,Tidyverse 函数对我来说似乎比sapply()or Map()- 我更喜欢 Tidyverse 函数中的默认值和参数顺序 - 但我不会想到称之为sapply()“不受欢迎”。

r options sapply lintr

4
推荐指数
1
解决办法
86
查看次数