R Сценарий успешно работает на локальном компьютере, а не на экземпляре EC2 - PullRequest
0 голосов
/ 07 сентября 2018

У меня есть R-скрипт (API-интерфейс R-сантехника), который я развернул в экземпляре EC2 и управляю с помощью pm2, и у меня возникла проблема. Я точно определил местонахождение ошибки и надеюсь немного лучше понять эту ошибку.

Когда я запускаю скрипт на моей локальной машине (RStudio на моем Mac), он работает нормально. Когда я запускаю скрипт, используя Rscript myrfile.R из командной строки экземпляра EC2, он ломается.

Я точно определил, что строка кода, которая нарушает работу сценария на экземпляре EC2, а также его ошибка:

my_df <- my_df %>%
  dplyr::mutate(AwayScore = ifelse(dplyr::row_number() == 1, 0, AwayScore),
                HomeScore = ifelse(dplyr::row_number() == 1, 0, HomeScore)) 

# with the following error
<Rcpp::eval_error in mutate_impl(.data, dots): Evaluation error: argument "x" is missing, with no default.>

Я на 100% уверен, что dplyr установлен на экземпляре EC2, так как мой скрипт использует его повсюду. Я также на 100% уверен, что у my_df здесь есть столбцы AwayScore и homeScore, а также у my_df нет других проблем.

Мне остается предположить, что эта ошибка связана именно с функцией dplyr :: row_number (), которую экземпляр EC2, по-видимому, не может обработать, хотя я не уверен в этом.

Буду очень признателен за любые мысли / помощь / вещи, которые я должен попробовать / и т.д., спасибо !!

Ответы [ 2 ]

0 голосов
/ 08 сентября 2018

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

Я столкнулся с подобной проблемой, используя R скрипт. Я обнаружил, что он не может найти библиотеки, которые я установил. Можно использовать R.exe вместо Rscript.exe, но это вызывает другие головные боли. Я обнаружил, что среда при использовании Rscript не содержит путь R_LIBS_USER

Если вы добавите следующий код в начало вашего скрипта R, он должен работать

p <- "\directory path of local R packages"

.libPaths(c(p,.libPaths()))

указание пути к папке, где находятся ваши библиотеки на компьютере. Это путь, который будет возвращен Sys.getenv("R_LIBS_USER"), если запустить R в графическом интерфейсе

0 голосов
/ 08 сентября 2018

Мне было достаточно просто изменить свой код следующим образом:

  if(is.na(my_df$AwayScore[1])) { my_df$AwayScore[1] = 0 }
  if(is.na(my_df$HomeScore[1])) { my_df$HomeScore[1] = 0 }

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

...