2016-05-10 3 views
0

Ich laufe auf das folgende Problem. Ich definiere einen Latex-Befehl für ifcase, um aus mehreren Optionen zu wählen. Dann habe ich einen Code, der die Zahlen bestimmt, die in ifcase über \ Sexpr {} verwendet werden. Mein Problem ist, dass, wenn \ Sexpr NA produziert, diese auch in der Ausgabedatei erscheinen. Ich hoffe, dass der MWE hilft zu klären, was ich meine, ansonsten zögere bitte nicht zu fragen.Wie mache ich Sexpr {} ignorieren 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} 

Der Ausgang liest "B C NA" aber ich will nur "B C"

Antwort

1

Das Problem hierbei ist, dass \ifcase nur ein Integer-Argument erlaubt, und NA sieht nicht aus wie ein zu LaTeX. Sie müssen NA in einen ganzzahligen Wert ändern, der nicht in der Liste der Fälle enthalten ist. Zum Beispiel konvertiert diese Version NA zu -1, was niemals einem Fall entsprechen würde:

\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

Danke für die Lösung und Erklärung. Dies ist viel besser als die Umgehung des manuellen Hinzufügens von Werten mit c (S, 99: 199), die ich mir ausgedacht hatte. – marco

Verwandte Themen