2016-05-10 4 views
0

Я столкнулся с следующей проблемой. Я определяю команду Latex для ifcase для выбора нескольких параметров. Затем у меня есть код r, который определяет числа, используемые в ifcase через \ Sexpr {}. Моя проблема в том, что когда \ Sexpr производит NA, они также появляются в выходном файле. Я надеюсь, что MWE поможет прояснить, что я имею в виду, иначе, пожалуйста, не стесняйтесь спрашивать.Как сделать Sexpr {} игнорировать NA

\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»

ответ

1

Проблема здесь состоит в том, что \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} 
+0

Спасибо за решение и объяснение. Это намного лучше, чем обходной способ добавления значений вручную с помощью c (S, 99: 199), с которым я столкнулся. – marco