Используйте имя файла или путь к файлу в программах R
Кто-нибудь знает, возможно ли получить имя файла / путь к файлу программы R? Я ищу что-то похожее на "%sysfunc(GetOption(SYSIN)))" в SAS, который будет возвращать путь к файлу программы SAS (работает в пакетном режиме). Могу ли я сделать что-нибудь подобное в R?
Лучшее, что я смог придумать, это добавить имя файла и текущий каталог с помощью сочетаний клавиш в используемом мной текстовом редакторе (PSPad). Есть ли более простой способ сделать это?
Вот мой пример:
progname<-"Iris data listing"
# You must use either double-backslashes or forward slashes in pathnames
progdir<-"F:\\R Programming\\Word output\\"
# Set the working directory to the program location
setwd(progdir)
# Make the ReporteRs package available for creating Word output
library(ReporteRs)
# Load the "Iris" provided with R
data("iris")
options('ReporteRs-fontsize'=8, 'ReporteRs-default-font'='Arial')
# Initialize the Word output object
doc <- docx()
# Add a title
doc <- addTitle(doc,"A sample listing",level=1)
# Create a nicely formatted listing, style similar to Journal
listing<-vanilla.table(iris)
# Add the listing to the Word output
doc <- addFlexTable(doc, listing)
# Create the Word output file
writeDoc( doc, file = paste0(progdir,progname,".docx"))
Это работает довольно хорошо, как в пакетном, так и в RStudio. Я действительно ценю лучшее решение, хотя
1 ответ
Ссылка на Rscript: определение пути выполнения скрипта, предоставленного @Juan Bosco, содержала большую часть необходимой мне информации. Одной из проблем, которые он не решал, было выполнение R-программы в RStudio (поиск в RStudio был обсужден и решен). Я обнаружил, что эту проблему можно решить с помощью rstudioapi::getActiveDocumentContext()$path)
,
Также следует отметить, что решения для пакетного режима не будут работать с использованием
Rterm.exe --no-restore --no-save < %1 > %1.out 2>&1
Решения требуют, чтобы --file=
опция будет использоваться, например
D:\R\R-3.3.2\bin\x64\Rterm.exe --no-restore --no-save --file="%~1.R" > "%~1.out" 2>&1 R_LIBS=D:/R/library
Вот новая версия get_script_path
функция размещена @aprstar. Это было изменено, чтобы также работать в RStudio (обратите внимание, что это требует rstudioapi
библиотека.
# Based on "get_script_path" function by aprstar, Aug 14 '15 at 18:46
# https://stackru.com/questions/1815606/rscript-determine-path-of-the-executing-script
# That solution didn't work for programs executed directly in RStudio
# Requires the rstudioapi package
# Assumes programs executed in batch have used the "--file=" option
GetProgramPath <- function() {
cmdArgs = commandArgs(trailingOnly = FALSE)
needle = "--file="
match = grep(needle, cmdArgs)
if (cmdArgs[1] == "RStudio") {
# An interactive session in RStudio
# Requires rstudioapi::getActiveDocumentContext
return(normalizePath(rstudioapi::getActiveDocumentContext()$path))
}
else if (length(match) > 0) {
# Batch mode using Rscript or rterm.exe with the "--file=" option
return(normalizePath(sub(needle, "", cmdArgs[match])))
}
else {
ls_vars = ls(sys.frames()[[1]])
if ("fileName" %in% ls_vars) {
# Source'd via RStudio
return(normalizePath(sys.frames()[[1]]$fileName))
}
else {
# Source'd via R console
return(normalizePath(sys.frames()[[1]]$ofile))
}
}
}
Я поместил это в моем .Rprofile
файл. Теперь я могу получить информацию о файле в пакетном режиме или в RStudio, используя следующий код. Я не пробовал это с помощью source()
но это тоже должно сработать.
# "GetProgramPath()" returns the full path name of the file being executed
progpath<-GetProgramPath()
# Get the filename without the ".R" extension
progname<-tools::file_path_sans_ext(basename(progpath))
# Get the file directory
progdir<-dirname(progpath)
# Set the working directory to the program location
setwd(progdir)