Поиск и настройка рабочего каталога на суперкомпьютере - PullRequest
0 голосов
/ 05 апреля 2020

Очевидно, что можно найти и установить рабочие каталоги с помощью getwd () и setwd (). Этот вопрос немного сложнее. Я запускаю два файла на суперкомпьютере (один является обычным R-файлом, который вызывает другой файл (файл .stan). Способ, которым я отправляю работу на суперкомпьютер, заключается в том, что мне нужно сжать папку, содержащую данные, файл .R и файл .stan. Я загружаю эту папку и извлекаю эту папку, устанавливая ее в качестве одного из параметров на суперкомпьютере. Я вызываю данные с помощью стандартной команды read.csv (), и все hunky dory.

Однако, когда я вызываю файл .stan из файла .R, он не может получить к нему доступ, потому что ему нужно знать рабочий каталог. Это ошибка, которую я получаю:

> fit <- stan(file="ace_thresholds.stan", data=stanData, cores = 4)
Error in file(fname, "rt") : cannot open the connection
In addition: Warning messages:
1: In normalizePath(file) :
  path[1]="ace_thresholds.stan": No such file or directory
2: In file(fname, "rt") :
  cannot open file 'ace_thresholds.stan': No such file or directory
Error in get_model_strcode(file, model_code) : 
  cannot open model file "ace_thresholds.stan"
Calls: stan -> stan_model -> stanc -> get_model_strcode
Execution halted

Когда я попытался установить рабочий каталог в разархивированную папку NSG_stan (что я и предполагал в качестве wd, я получил эту ошибку:

fit <- stan(file="NSG_stan/ace_thresholds.stan", data=stanData, cores = 4)
Error in file(fname, "rt") : cannot open the connection
In addition: Warning messages:
1: In normalizePath(file) :
  path[1]="NSG_stan/ace_thresholds.stan": No such file or directory
2: In file(fname, "rt") :
  cannot open file 'NSG_stan/ace_thresholds.stan': No such file or directory
Error in get_model_strcode(file, model_code) : 
  cannot open model file "NSG_stan/ace_thresholds.stan"
Calls: stan -> stan_model -> stanc -> get_model_strcode
Execution halted

Итак, я попытался запустить print (getwd ( )) внутри скрипта и в распечатке я вижу, что wd равно

"/projects/ps-nsg/home/nsguser/ngbw/workspace/NGBW-JOB-RTOOL_TG-EBE9CDBF28BF42AF8CB6EC9355006B3E/NSG_stan"

, что означает, что рабочий каталог будет сдвигаться при каждом задании. Поэтому для точной настройки рабочего каталога мне нужно Перейдите в текущую папку в скрипте. Я искал различные посты о том, как это сделать, например:

# install.packages("rstudioapi") # run this if it's your first time using it to install
library(rstudioapi) # load it
# the following line is for getting the path of your current open file
current_path <- getActiveDocumentContext()$path 
# The next line set the working directory to the relevant one:
setwd(dirname(current_path ))
# you can make sure you are in the right directory
print( getwd() )

Проблема в том, что это супер компьютер, поэтому сложно устанавливать пакеты, потому что каждый раз, когда я хочу что-то установить, я Я должен отправить электронное письмо людям, связанным с суперкомпом, и все это занимает время.

Я также просмотрел эту ветку: Команда R для установки рабочего каталога в расположение исходного файла в Rstudio, Похоже, много несогласия по поводу того, что работает. Я попробовал пару из них, и они не работали.

setwd(getSrcDirectory()[1])
this.dir <- dirname(parent.frame(2)$ofile)
setwd(this.dir)

Я включил файл .R ниже, на случай, если это поможет, но я думаю, что это, вероятно, довольно простой ответ для человека с приличным опытом написания кода.

.R файл (так что это файл "ace_thresholds.stan", который мне нужно либо связать с текущим wd, либо включить код, который установит WD, такой, что этот вызов "ace_thresholds.stan" будет работать. Это имеет смысл?

Большое спасибо!

dat <- ace.threshold.t2.samp
dat <- subset(dat, !is.na(rw))
dat$condition <- factor(dat$condition)
dat$pid <- factor(dat$pid)


nTotal <- dim(dat)[1]
nCond <- length(unique(dat$condition))
nSubj <- length(unique(dat$pid))
intensity <- dat$rw
condition <- as.numeric(dat$condition)
pid <- as.numeric(dat$pid)
correct <- dat$correct_button == "correct"
chancePerformance <- 1/2
stanData <- list(nTotal=nTotal, nLevels=nCond, nSubj = nSubj, subject = pid, intensity=intensity, level=condition, correct=correct, chancePerformance=chancePerformance)

fit.rw <- stan(file="ace_thresholds.stan", data=stanData, cores = 4, control=list(max_treedepth=15, adapt_delta=0.90))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...