\Sexpr 和 = 之间的区别

\Sexpr 和 = 之间的区别

我是新手sweave,需要学习很多东西。大多数情况下,\Sexpr它适用于简单变量以及调用 R 函数。

但其他时候它会失败,我发现我可以使用<<>>=命令来解决这个问题。我很想知道有什么区别,以及什么时候应该使用哪一个。

例如:

使用\Sexpr{parc.name(parc)}但是\Sexpr{p_curve.data.points(p_curve.data);} 将不会工作,但是以下将要工作:

<<echo=false,results=tex>>=
            p_curve.data.points(p_curve.data);
@

其中函数在单独的文件中定义,使用source("filename.R")

parc.name <- function(code) {
    conn <- connect();
    res <- dbGetQuery(conn, paste("SELECT displayname FROM machinepark WHERE name='", code, "' LIMIT 1", sep=""));
    disconnect(conn);
    res$displayname[1];
}

p_curve.data.points <- function(pc_data) {
    rows <- length(pc_data$power);
    for(i in 1:rows){
        cat("(", pc_data$windspeed[i], ",", pc_data$power[i], ")");
    }
}

答案1

cat在语句中是不合适的\Sexpr。我相信它会尝试cat根据求值后返回的值来运行\Sexpr;由于cat不返回值,所以\Sexpr没有任何内容可输出。

.Rnw有关示例请参阅以下文件。

\documentclass{article}
\begin{document}

<<>>=
sayhi <- function(k=2) {for(i in 1:k) cat("hi",i,"| ") }
sayhi()
@ 

But with Sexpr, {\tt sayhi()} prints <\Sexpr{sayhi()}>.

Note that {\tt sayhi()} returns nothing; that's why Sexpr doesn't work.

<<>>=
a <- sayhi()
cat(a)
@ 

<<>>=
savehi <- function(k=2) {
  out <- c()
  for(i in 1:k) {
    out <- paste(out, "hi", i,"| ")
  }
  out
}
hi <- savehi()
cat(hi)
@ 

And with Sexpr, {\tt savehi()} prints <\Sexpr{savehi()}>.

\end{document}

除了原始答案之外:\Sexpr表达式的另一个“陷阱”是尝试使用花括号。表达式中不允许使用花括号\Sexpr。相反,在隐藏的代码块中进行计算,并在 中使用结果\Sexpr

查看编织手册了解详情。

另请参阅这个问题在 stackoverflow。

相关内容