Установите глобальную переменную пути, которую все функции используют для сохранения файлов в R - PullRequest
0 голосов
/ 18 октября 2018

У меня есть простая проблема, для которой я не могу найти простое решение.Я использую R для конвейера анализа данных, и я хочу установить выходной путь в качестве глобальной переменной.Это должно затем использоваться различными функциями для сохранения таблиц и графиков.Я хочу избежать необходимости передавать эту переменную пути каждой функции.Итак, я сделал следующее:

outpath <- "../results/"
function1 <- function(){
    ... # analysis
    write.table(result, file = paste0(outpath,"/function1results.xls"))
    }

Это работает нормально, если я просто вызываю функцию function1 () в Rstudio с переменной outpath в рабочей среде.Однако, если я хочу запустить весь сценарий на другой рабочей станции с «Rscript», я получаю следующую ошибку:

Ошибка в as.vector (x, «символ»):

не может привести тип 'замыкание' к вектору типа 'символ'

Я предполагаю, что я что-то напутал с тем, как R обрабатывает окружение.Может быть, кто-то лучше меня понимает:)

РЕДАКТИРОВАТЬ: Может быть интересно, что я запускаю Windows на моей локальной машине, в то время как рабочая станция работает под Linux.

Ответы [ 2 ]

0 голосов
/ 18 октября 2018

Относительные пути - это путь к катастрофе, особенно если скрипт R не запускается из одного и того же места во всех системах.

Если вы уверены - 100% уверены - этот скрипт всегда будет запускаться из согласованного местоположения, тогда вы можете поставить:

outpath_prefix <- "../results/"

в верхней части скрипта и используйте функцию file.path(), чтобы объединить пути независимо от платформы:

file.path(outpath_prefix, "function1results.xls")

Прочитайте страницу справки (?file.path)для этой функции, специально для этого драгоценного камня:

Реализация разработана так, чтобы быть быстрой (быстрее, чем вставка), так как эта функция широко используется в самом R.

ОДНАКО

Подумайте об использовании концепции «проект» и установите пакет here.

Либо используйте правильный «проект» (т. Е. Стандарт, определенный RStudio), который помещает «project-name.Rproj»в корневом каталоге проекта или создайте один из этих файлов (они могут быть пустыми) в корневом каталоге проекта:

- `.here` 
- `.projectile`

или используйте контроль версий для проекта (который является всегда хорошая идея) и убедитесь, что файл .git находится в корневом каталогепроекта.

Затем вы можете сделать:

outpath_prefix <- here::here("results")

в верхней части любого сценария в каталоге проекта независимо отглубина и до сих пор делают:

file.path(outpath_prefix, "function1results.xls")

, чтобы получить независимые от платформы, менее подверженные ошибкам и быстрее генерируемые спецификации пути для ввода / вывода.

0 голосов
/ 18 октября 2018

Поместите выходной путь в функцию

outpath <- "../results/"

function1 <- function(out){
    ... # analysis
    write.table(result, file = paste0(out,"/function1results.xls")
}

function1(outpath)
...