如何让 \Sexpr{} 忽略 NA

How to make \Sexpr{} ignore NA

我运行进入以下问题。我为 ifcase 定义了一个 Latex 命令以从多个选项中进行选择。然后我有一些 r 代码通过 \Sexpr{} 确定 ifcase 中使用的数字。我的问题是,当 \Sexpr 产生 NA 时,它们也会出现在输出文件中。我希望 MWE 有助于澄清我的意思,否则请不要犹豫。

\documentclass{article}
\begin{document}
\SweaveOpts{concordance=TRUE}

\newcommand{\QPR}[1]
{
\ifcase #1
\or 
         A
\or
         B
\or
         C
\fi
}

<<g, echo=FALSE, results=tex,prefix=FALSE>>=
S=2:3
@

\QPR{\Sexpr{S[1]}}
\QPR{\Sexpr{S[2]}}
\QPR{\Sexpr{S[3]}}

\end{document}

输出显示为 "B C NA" 但我只想要 "B C"

这里的问题是 \ifcase 只允许一个整数参数,而 NA 看起来不像 LaTeX。您需要将 NA 更改为一些不在案例列表中的整数值。例如,此版本将 NA 转换为 -1,它永远不会匹配大小写:

\documentclass{article}
\begin{document}
\SweaveOpts{concordance=TRUE}

\newcommand{\QPR}[1]
{
\ifcase #1
\or 
         A
\or
         B
\or
         C
\fi
}

<<g, echo=FALSE, results=tex,prefix=FALSE>>=
S=2:3
hideNA <- function(x) if (is.na(x)) -1 else x
@

\QPR{\Sexpr{hideNA(S[1])}}
\QPR{\Sexpr{hideNA(S[2])}}
\QPR{\Sexpr{hideNA(S[3])}}

\end{document}