我是新手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。