Является ли 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. Однако это не похоже на то, что вы хотите, поскольку оно не будет работать так, как вы ожидаете, когда его привлечет Ниттер.

  • matplotlib аналог R "пар"
  • Иерархические байесов для R или Python
  • Вычислять в категориях: Эквивалент R-ddply в Python?
  • Python: обработка большого набора данных. Scipy или Rpy? И как?
  • подача нескольких искровых приложений в автономном режиме
  • R ядро ​​для ноутбука jupyter, мертвое при установке
  • Как сохранить ярлыки, когда SPSS-файл (.sav) импортирован в pandas через rpy?
  • Уменьшить количество уровней для больших категориальных переменных
  •  
    Interesting Posts for Van-Lav

    Любая библиотека поддержки AOP для Python?

    Сохраняйте результат TFIDF для прогнозирования нового контента с помощью Scikit for Python

    Как получить имена столбцов из строки, возвращенной из запроса adodbapi?

    редактирование wav-файлов с помощью python

    Есть ли способ получить доступ к клавиатуре в Windows без предоставления мастер-пароля?

    Python Pandas объединяет только определенные столбцы

    Как проверить подлинность с помощью API настроек электронной почты Google, используя учетную запись службы oauth2 Клиент Python?

    ImportError: нет модуля с именем _imagingtk

    Какое событие я должен привязать до включения кнопки в wxPython?

    Как модулировать HTTPS-запросы в Flask?

    В чем разница между scgi и wsgi?

    Python super () аргументы: почему бы не super (obj)?

    Создание службы android Python для запуска в состоянии приостановки

    Используйте список значений для выбора строк из блока данных pandas

    Pandas: получить метку для значения в объекте серии

    Python - лучший язык программирования в мире.