У меня есть функция, которая устанавливает вектор в строку, копирует документ Sweave с новым именем, а затем запускает этот Sweave. Внутри документа Sweave я хочу использовать вектор, который я установил в функции, но, похоже, он его не видит.
(Редактировать: я изменил эту функцию, чтобы использовать tempdir(() как предложил Дирк)
Я создал файл свейва test_sweave.rnw;
%
\documentclass[a4paper]{article}
\usepackage[OT1]{fontenc}
\usepackage{Sweave}
\begin{document}
\title{Test Sweave Document}
\author{gb02413}
\maketitle
<<>>=
ls()
Sys.time()
print(paste("The chosen study was ",chstud,sep=""))
@
\end{document}
и у меня есть эта функция;
onOK <- function(){
chstud<-"test"
message(paste("Chosen Study is ",chstud,sep=""))
newfile<-paste(chstud,"_report",sep="")
mypath<-paste(tempdir(),"\\",sep="")
setwd(mypath)
message(paste("Copying test_sweave.Rnw to ",paste(mypath,newfile,".Rnw",sep=""),sep=""))
file.copy("c:\\local\\test_sweave.Rnw",
paste(mypath,newfile,".Rnw",sep=""), overwrite=TRUE)
Sweave(paste(mypath,newfile,".Rnw",sep=""))
require(tools)
texi2dvi(file = paste(mypath,newfile,".tex",sep=""), pdf = TRUE)
}
Если я запускаю код из функции напрямую, в результирующем файле будет такой вывод для ls();
> ls()
[1] "chstud" "mypath" "newfile" "onOK"
Однако, если я вызову onOK(), я получу этот вывод;
> ls()
[1] "onOK"
а функция print(...chstud...)) выдает ошибку.
Я подозреваю, что это проблема среды, но я предположил, что, поскольку вызов Sweave происходит внутри функции onOK, он будет в той же среде и будет видеть все объекты, созданные внутри функции. Как я могу заставить процесс Sweave увидеть вектор chstud?
Спасибо
Павел.
tempdir()
илиtempfile()
)? - person Dirk Eddelbuettel   schedule 26.05.2010