R Sweave 因写作风格而未被正确解读?

R Sweave 因写作风格而未被正确解读?

这种情况不会被正确解释。我怀疑这一定与我的写作风格有关,但我没有注意到是什么。您可以运行它并R CMD Sweave Test.Rnw; pdflatex Test.tex生成 Test.tex 文件,然后编译为 Test.pdf。

是什么原因导致运行结果乱码?为什么 Sweave 块无法正确解释?

Test.Rnw 导致乱码

\documentclass{article}
\usepackage{subcaption}
\usepackage{graphicx}
\usepackage{pdfpages}

\usepackage{Sweave}
\begin{document}
.
\begin{figure}
\centering
   \begin{subfigure}[b]{0.55\textwidth}
   <<>>=
    all.lab <- c("Arr./A", "Sin", "Digox")
    all.dat <- c(2274959, 1531001, 2406739)
    barplot(all.dat,
            names.arg=all.lab,
            col="darkblue",
            ylab="Average byte size",
            xlab="Groups")
    grid()
   @
   %\includepdf{fig1.pdf}
   \caption{a}
   \label{fig:Ng1}
\end{subfigure}
\begin{subfigure}[b]{0.55\textwidth}
   <<>>=
    age.lab <- c("Arr. +65", "Arr. [45,65]", "Arr", "Sin", "Sin +33")
    age.dat <- c(2274959, 1481397, 773624, 874208, 1087411)
    barplot(age.dat,
            names.arg=age.lab,
            col="darkblue",
            ylab="Average byte size",
            xlab="Groups")
    grid()
   @
   %\includepdf{fig2.pdf}
   \caption{b}
   \label{fig:Ng2}
\end{subfigure}
\begin{subfigure}[b]{0.55\textwidth}
   %\includepdf{fig3.pdf}
   <<>>=
    gender.lab <- c("Arr. f", "A m", "Sin f", "Sinu", "Digox f", "Digon m")
    gender.dat <- c(1416043, 2448017, 1421385, 537783, 1256545, 1181350)
    barplot(gender.dat,
            names.arg=gender.lab,
            col="darkblue",
            ylab="Average byte size",
            xlab="Groups")
    grid()
   @
   \caption{c}
   \label{fig:Ng2}
\end{subfigure}
\caption{MAIN CAPTION}
\end{figure}
\end{document}

在此处输入图片描述

答案1

错误在于您缩进了 Sweave 块,您必须取消缩进该块。Sweave 似乎对缩进很敏感。

在此处输入图片描述

\documentclass{article}
\usepackage{subcaption}
\usepackage{graphicx}
\usepackage{pdfpages}

\usepackage{Sweave}
\begin{document}
\begin{figure}
\centering
\begin{subfigure}[b]{0.55\textwidth}
<<fig=TRUE>>=
all.lab <- c("Arr./A", "Sin", "Digox")
all.dat <- c(2274959, 1531001, 2406739)
barplot(all.dat,
    names.arg=all.lab,
    col="darkblue",
    ylab="Average byte size",
    xlab="Groups")
grid()
@
\caption{a}
\label{fig:Ng1}
\end{subfigure}
\begin{subfigure}[b]{0.55\textwidth}
<<fig=TRUE>>=
age.lab <- c("Arr. +65", "Arr. [45,65]", "Arr", "Sin", "Sin +33")
age.dat <- c(2274959, 1481397, 773624, 874208, 1087411)
barplot(age.dat,
    names.arg=age.lab,
    col="darkblue",
    ylab="Average byte size",
    xlab="Groups")
grid()
@
\caption{b}
\label{fig:Ng2}
\end{subfigure}
\begin{subfigure}[b]{0.55\textwidth}
<<fig=TRUE>>=
gender.lab <- c("Arr. f", "A m", "Sin f", "Sinu", "Digox f", "Digon m")
gender.dat <- c(1416043, 2448017, 1421385, 537783, 1256545, 1181350)
barplot(gender.dat,
    names.arg=gender.lab,
    col="darkblue",
    ylab="Average byte size",
    xlab="Groups")
grid()
@
\caption{c}
\label{fig:Ng2}
\end{subfigure}
\caption{MAIN CAPTION}
\end{figure}
\end{document}

最小工作示例

我解决问题的方法是封装问题,我注意到代码中似乎有一些冲突的字符、块或空格。我提供了以下一些小的工作示例,让我意识到错误一定出在缩进中。

示例 1. OP 的子案例与 Sweave 合作

\documentclass{article}
\usepackage{graphicx}
\usepackage{Sweave}

\begin{document}
\begin{figure}
<<fig=TRUE>>=
library(ggplot2)
all.lab <- c('Arr./A', 'Sin', 'Digox')
all.dat <- c(2274959, 1531001, 2406739)
ggplot() + geom_bar(aes(x=all.lab, y=all.dat), stat='identity')
@
\end{figure}
\end{document}

在此处输入图片描述

示例 2. Ggplot 与 Sweave 配合使用

\documentclass{article}
\usepackage{graphicx}
\usepackage{Sweave}
\begin{document}
\SweaveOpts{concordance=TRUE}

\begin{figure}
\centering
<<fig=TRUE>>=
library(ggplot2)
p <- ggplot(diamonds, aes(x=carat))
p <- p + geom_histogram()
print(p)
@
\end{figure}
\end{document}

在此处输入图片描述

示例 3. 使用 Sweave 的基本命令

\documentclass{article}
\usepackage{graphicx}         
\usepackage{Sweave}
\begin{document}
\begin{figure}
\centering
<<fig=TRUE>>=
plot(1:10)
@
\end{figure}
\end{document}

在此处输入图片描述

跑步

  1. R CMD Sweave 测试.Rnw
  2. pdflatex 测试.txt
  3. 开放测试.pdf

答案2

使用 Rstudioknitr,您的代码照原样可以编译显示图表,但您必须添加echo=FALSE隐藏 R 代码并将三幅图像放在一页中。当然,这\usepackage{Sweave}不是必需的(使用 Sweave 和 Rstudio 也不需要)。您还可以省略浮动之外的任何文本。

如果您需要继续使用 Sweave,那么您应该关心块缩进、fig=TRUE选项,当然,至少对于具有三个子图的浮点数,省略回显。

姆韦

\documentclass{article}
\usepackage{subcaption}
\usepackage{graphicx}
\usepackage{pdfpages}
\begin{document}
\begin{figure}
\centering
   \begin{subfigure}[b]{0.55\textwidth}
   <<echo=F>>=
    all.lab <- c("Arr./A", "Sin", "Digox")
    all.dat <- c(2274959, 1531001, 2406739)
    barplot(all.dat,
            names.arg=all.lab,
            col="darkblue",
            ylab="Average byte size",
            xlab="Groups")
    grid()
   @
   %\includepdf{fig1.pdf}
   \caption{a}
   \label{fig:Ng1}
\end{subfigure}
\begin{subfigure}[b]{0.55\textwidth}
   <<echo=F>>=
    age.lab <- c("Arr. +65", "Arr. [45,65]", "Arr", "Sin", "Sin +33")
    age.dat <- c(2274959, 1481397, 773624, 874208, 1087411)
    barplot(age.dat,
            names.arg=age.lab,
            col="darkblue",
            ylab="Average byte size",
            xlab="Groups")
    grid()
   @
   %\includepdf{fig2.pdf}
   \caption{b}
   \label{fig:Ng2}
\end{subfigure}
\begin{subfigure}[b]{0.55\textwidth}
   %\includepdf{fig3.pdf}
   <<echo=F>>=
    gender.lab <- c("Arr. f", "A m", "Sin f", "Sinu", "Digox f", "Digon m")
    gender.dat <- c(1416043, 2448017, 1421385, 537783, 1256545, 1181350)
    barplot(gender.dat,
            names.arg=gender.lab,
            col="darkblue",
            ylab="Average byte size",
            xlab="Groups")
    grid()
   @
   \caption{c}
   \label{fig:Ng2}
\end{subfigure}
\caption{MAIN CAPTION}
\end{figure}
\end{document}

此外,knitr功能更强大:只需考虑使用 knitr 的“示例 2”:

在此处输入图片描述

\documentclass{article}
\begin{document}
\begin{figure}
    <<>>=
        library(ggplot2)
        p <- ggplot(diamonds, aes(x=carat))
        p <- p + geom_histogram(bins=30)
        print(p)
    @
\end{figure}
\end{document}

相关内容