在 R 代码中加载库后代码出错

在 R 代码中加载库后代码出错

我一直在 RStudio 中编写代码并使用 TinyTex 编译我的 pdf。我在 RStudio 中的 RSweave 文件中编写了以下代码:

\documentclass[12 pt]{article}
\usepackage[utf8]{inputenc}

\usepackage{amsmath, amssymb}
\usepackage[margin=1.25in]{geometry}
\usepackage{hyperref}
\usepackage{enumitem}
\usepackage{tcolorbox}
\newtcolorbox{boxy}[1]{colback=green!5!white, colframe=green!75!black, title={#1}}

\usepackage{color}
\usepackage{graphicx}

\definecolor{astral}{RGB}{46,116,181}
\hypersetup{
    colorlinks,
    citecolor=astral,
    filecolor=astral,
    linkcolor=black,
    urlcolor=astral
}

\usepackage{fancyhdr}
\pagestyle{fancy}
\lhead{\thetitle}
\rhead{\theauthor}
\cfoot{\thepage}
\setlength{\headheight}{14pt}

\makeatletter
\title{\textbf{\underline{Assignment 2}}}\let\thetitle\@title
\author{Devansh Kamra}
\makeatother

\begin{document}

\maketitle

\begin{boxy}{Question No. 1}
  \begin{enumerate}
    \item Run \verb|ggplot(data = mpg)|. What do you see?
    \item How many rows are in \verb|mpg|? How many columns?
    \item What does the \verb|drv| variable describe? Read the help for \verb|?mpg| to find out.
    \item Make a scatterplot of \verb|hwy| vs \verb|cyl|.
    \item What happens if you make a scatterplot of class vs drv? Why is the plot not useful?
  \end{enumerate}
\end{boxy}

\section*{\underline{Solution:}}
  \subsection*{\underline{Part 1}}
    Running \verb|ggplot(data = mpg)|:
    <<>>=
    ggplot(data = mpg)
    @
    We can easily see that \verb|ggplot(data = mpg)| gives us an empty plane to plot the data on.

\end{document}

它给了我这个输出pdf: 在此处输入图片描述

它说找不到函数ggplot,这完全可以理解,因为我library("tidyverse")还没有加载。但它正在编译 pdf,我假设没有 LaTeX 错误。现在我只需添加library("tidyverse")到前面的代码中:

%%same code before
Running \verb|ggplot(data = mpg)|:
    <<>>=
    library("tidyverse")
    ggplot(data = mpg)
    @
%%same code after

但是现在编译后出现以下错误,并且没有生成 pdf。

Loading required package: knitr


processing file: assign2.Rnw
  |.......................                                               |  33%
  ordinary text without R code

  |...............................................                       |  67%
label: unnamed-chunk-1 (with options) 
List of 1
 $ indent: chr "    "

  |......................................................................| 100%
  ordinary text without R code


output file: assign2.tex

[1] "assign2.tex"
Compiling document with tinytex ... ! Undefined control sequence.
\f@nch@orh ->\theauthor 
                        \strut 
l.132 \end{document}

Error: LaTeX failed to compile D:/hp/Desktop/assign2.tex. See https://yihui.org/tinytex/r/#debugging for debugging tips. See assign2.log for more info.
Execution halted
failed

Bad Box: pgf.sty:120: Overfull \hbox (32.5757pt too wide) in paragraph at lines 120--121
Bad Box: pgf.sty:124: Overfull \hbox (68.61136pt too wide) in paragraph at lines 124--124
Bad Box: pgf.sty:128: Overfull \hbox (17.62482pt too wide) in paragraph at lines 128--131
Error: pgf.sty:132: Undefined control sequence.
Error: pgf.sty:  ==> Fatal error occurred, no output PDF file produced!

现在我可能错了,但过满 \hbox 错误通常是 LaTeX 错误,如果是,那么为什么它们在加载之前没有显示library("tidyverse")?请帮助我纠正这些错误,如果这微不足道,我很抱歉,因为我是 R 的新手。

谢谢

编辑:一旦我删除以下块,代码就会给我一个完美编译的pdf:

%%same code before
\usepackage{fancyhdr}
\pagestyle{fancy}
\lhead{\thetitle}
\rhead{\theauthor}
\cfoot{\thepage}
\setlength{\headheight}{14pt}
%%same code after

这显然意味着我无法fancyhdr在代码中使用包。这是为什么?有什么方法可以解决这个问题,以便我能够使用该包?

编辑2:错误出现在以下区块中:

<<>>=
\makeatletter
\title{\textbf{\underline{Assignment 2}}}\let\thetitle\@title
\author{Devansh Kamra}
\makeatother
@

上面的块中\let\theauthor\@author缺少。添加后,它就可以很好地编译 pdf。

答案1

一些评论和观察,没有解决方案。我把它放在这里,因为几乎不可能包含在评论中。无意讨论,请参阅此处的规则。

  1. 如果我复制你的初始代码(带有错误的 [12 pt]),我会得到这个编译,它显然与你的不同;它只是警告有关 inputenc: 在此处输入图片描述

  2. 添加与 R 相关的代码实际上并没有改变任何东西: 在此处输入图片描述

  3. 我正在离线使用 MikTex。你们如何编译 Latex?

  4. 我目前还不清楚 R 代码是如何执行的,以及在 Latex 编译过程中如何包含其结果。通常你会使用像这样的专用包(符号包)\usepackage{someR-Magic}……但我在你的序言中没有看到任何内容。(如果你还没有,请在此处查看:https://tex.stackexchange.com/questions/tagged/r

  5. 从您上次的观察来看,丢弃 fancyheader 相关代码,有迹象表明您有交互。既需要通过 Tidyverse 进行交互(无论它是什么),也需要不想要的交互(您的结果和我的结果 // 可变性 // 不稳定性)。

  6. 进一步阐述我的删除想法:

  • 将你的代码分成两半(或多或少)
  • 用一半编译,用另一半编译
  • 逐步重复,重点关注编译错误的“一半”(可能需要调查两者......)
  • 这会让你很快找到那些会带来某种问题的代码行
  1. 您的假设“Latex 代码很好,至少足够好”可能不成立。

  2. 我想知道在 Latex 编译期间执行 R 代码的原因是什么。通常你会外包这一步,并单独创建绘图。这样你就可以分离问题(比如可能在这里出现的问题),并且只需包含图形文件,最好是 .eps 格式。

答案2

需要更正两处:

  1. 不要缩进以 开头的代码块<<>>=。解析器找不到它。要开始使用代码块,请查看stationeryCRAN 上的包:文具:可重复研究文档的工作示例
  2. 您需要告诉从R哪里获取ggplot函数调用。要么写library(ggplot2)要么写ggplot2::ggplot(data=mpg)

在 中进行编译RStudio,或者R的插件WinEdt是另一种选择,它也在 CRAN 上:RWinEdt:R 接口到‘WinEdt’

在此处输入图片描述

\documentclass[12 pt]{article}
\usepackage[utf8]{inputenc}

\usepackage{amsmath, amssymb}
\usepackage[margin=1.25in]{geometry}
\usepackage{hyperref}
\usepackage{enumitem}
\usepackage{tcolorbox}
\newtcolorbox{boxy}[1]{colback=green!5!white, colframe=green!75!black, title={#1}}

\usepackage{color}
\usepackage{graphicx}

\definecolor{astral}{RGB}{46,116,181}
\hypersetup{
    colorlinks,
    citecolor=astral,
    filecolor=astral,
    linkcolor=black,
    urlcolor=astral
}

\usepackage{fancyhdr}
\pagestyle{fancy}
\lhead{\thetitle}
\rhead{\theauthor}
\cfoot{\thepage}
\setlength{\headheight}{14pt}

\makeatletter
\title{\textbf{\underline{Assignment 2}}}\let\thetitle\@title
\author{Devansh Kamra}
\makeatother

\begin{document}

\maketitle

\begin{boxy}{Question No. 1}
  \begin{enumerate}
    \item Run \verb|ggplot(data = mpg)|. What do you see?
    \item How many rows are in \verb|mpg|? How many columns?
    \item What does the \verb|drv| variable describe? Read the help for \verb|?mpg| to find out.
    \item Make a scatterplot of \verb|hwy| vs \verb|cyl|.
    \item What happens if you make a scatterplot of class vs drv? Why is the plot not useful?
  \end{enumerate}
\end{boxy}

\clearpage

\section*{\underline{Solution:}}
  \subsection*{\underline{Part 1}}
    Running \verb|ggplot(data = mpg)|:
    
<<ggplot, out.width="50%", fig.align = "center">>=
library(ggplot2)
ggplot(data = mpg)
@
    
We can easily see that \verb|ggplot(data = mpg)| gives us an empty plane to plot the data on.

\subsection*{\underline{Part 2}}

\texttt{mpg} has \Sexpr{nrow(mpg)} rows and \Sexpr{ncol(mpg)} columns.

\end{document}

相关内容