Является ли if (interactive ()) эквивалентом R для pythonic «если __name__ ==« __main__ »: main ()"?

Я хотел бы, чтобы R-скрипты имели функцию main (), которая выполняется в интерактивном режиме. Но функция main () не должна выполняться при поиске файла.

Об этом уже есть вопрос, и очень хороший ответ предполагает использование функции interactive (). Однако это не работает для меня. У меня недостаточно очков репутации для комментариев или ответов в этом вопросе. Поэтому я снова задаю этот вопрос.

Я пишу это в script_1.r

 if(interactive()){ your main code here } 

Если я использую knitr, чтобы отказаться от html или pdf-документа, используя сценарий. Этот код в if(interactive()) не будет выполнен. Это хорошо для меня, вот чего я хочу.

Моя проблема заключается в том, что если я source("script_1.r") из script_2.r в интерактивном режиме, он все равно будет запускать код под этой if(interactive()) частью.

2 Solutions collect form web for “Является ли if (interactive ()) эквивалентом R для pythonic «если __name__ ==« __main__ »: main ()"?”

Лучший способ получить вид контроля, который вы ищете, – это использовать параметры.

Например, «script.r» будет выглядеть так:

 main <- function() { message('main!') } if (getOption('run.main', default=TRUE)) { main() } 

Если вы загружаете файл в интерактивном режиме и не хотите, чтобы main выполнялся, просто вызовите options(run.main=FALSE) прежде чем вы обратитесь к source . Если вы используете скрипт с knitr и хотите выполнить main , не устанавливайте этот параметр, и по умолчанию он будет равен TRUE . Или, если вы не хотите, чтобы main запускался с knitr, вызывайте options(run.main=FALSE) прежде чем вызывать его.

Как вы заметили, нет, это не одно и то же. if(interactive()) делает именно то, что говорит это имя, – он проверяет, выполняется ли код в интерактивной оболочке. Не больше, не меньше.

Нет прямого эквивалента if __name__ == '__main__' из Python в R, так как R не имеет понятия модулей так же, как Python, а source код d просто выполняется непосредственно.

Однако вы можете написать свою собственную команду source чтобы заменить установленную по умолчанию и выполнить необходимую проверку.

Тем не менее, связанный с вами вопрос содержит ответ, который представляет собой обходной путь и существенно реплицирует функциональность Python. Однако это не похоже на то, что вы хотите, поскольку оно не будет работать так, как вы ожидаете, когда его привлечет Ниттер.

  • Как сгенерировать выборочные данные с точными моментами
  • Yahoo финансы ichart наличие услуг
  • График параллельных координат с пропущенными координатами
  • Виртуальная среда в R?
  • statmodels в пакете python, Как точно дублируются функции?
  • Как сохранить ярлыки, когда SPSS-файл (.sav) импортирован в pandas через rpy?
  • Markdown для воспроизводимых исследований на Python
  • Есть ли эквивалент pandas dplyr :: summary?
  • Могу ли я использовать параметр paste0 () в R, чтобы эта функция выполнялась так же быстро, как исходный пример Python?
  • Как передать функцию и ее аргументы через функцию обертки в R? Подобно * args и * kwargs в python
  • самый простой способ в R или Python добавить изображение / видео в маркер графического графика click popup / infowindow
  • Python - лучший язык программирования в мире.