Jak wyodrębnić wszystkie fragmenty kodu z pliku Rnw Sweave?
Otrzymałem plik .Rnw, który daje błędy podczas próby zbudowania pakietu, do którego należy. Problem polega na tym, że podczas sprawdzania pakietu za pomocą narzędzi w RStudio nie otrzymuję żadnych przydatnych informacji o błędach. Muszę więc najpierw dowiedzieć się, w którym wierszu kodu występuje błąd.
Aby to rozgryźć, napisałem ten pięciominutowy hack, aby pobrać wszystkie kawałki kodu w oddzielnym pliku. Mam przeczucie, że czegoś brakuje. Jaki jest czysty sposób wyodrębniania całego kodu w pliku Rnw, tak jak uruchamiasz plik skryptu? Czy istnieje funkcja do wyodrębnienia wszystkich lub uruchomienia wszystkich w taki sposób, aby dowiedzieć się, w której linii występuje błąd?
Mój hack:
ExtractChunks <- function(file.in,file.out,...){
isRnw <- grepl(".Rnw$",file.in)
if(!isRnw) stop("file.in should be an Rnw file")
thelines <- readLines(file.in)
startid <- grep("^[^%].+>>=$",thelines)
nocode <- grep("^<<",thelines[startid+1]) # when using labels.
codestart <- startid[-nocode]
out <- sapply(codestart,function(i){
tmp <- thelines[-seq_len(i)]
endid <- grep("^@",tmp)[1] # take into account trailing spaces / comments
c("# Chunk",tmp[seq_len(endid-1)])
})
writeLines(unlist(out),file.out)
}