2016-08-23 3 views
3

У меня есть сценарий с самописными функциями (без сюжетов). Когда я копирую этот скрипт в консоль R-Studio, для выполнения требуется возраст, но когда я использую source("Helperfunctions.R"), это занимает не больше секунды.Почему скорость источника отличается от строки строки консоли RStudio?

Вопрос: Откуда возникает разница в скорости?

Я знаю два различий между запущенной кодой через source() функции против ввода кода в консоли R-Studio:

От ?source:

Поскольку выражения не выполняется на верхнем уровне , авто-печать не выполняется.

Я так понимаю: source() будет не сюжетных графики (если конкретизированы, например, с print(plot)), в то время как консольные коды R Студийных будут всегда построить графики. Я уверен, что это повлияет на скорость выполнения в определенной степени, но в моем случае это кажется неуместным, потому что почти нет разговоров по сюжету.

И:

(...) полный файл анализируется, прежде чем какой-либо из него запускается

Я работал с R на некоторое время теперь, но я не убедитесь, что это актуально для скорости, которую я имею. Возможно ли, что полный анализ всего кода «до того, как он будет запущен» ускоряет выполнение скриптов моих вспомогательных функций в сотни раз?

Редактировать: Я использую R версию 3.2.3.

+1

R должен анализировать ваш код независимо от того, будет ли он источником сразу, или если вы делаете это по очереди. Вы используете Rgui? Что именно длится долго? – Roland

+0

Я использую RStudio. Я всегда запускаю свои скрипты с помощью 'source (" Helperfunctions.R ")', это быстро. Однако, когда я копирую содержимое Helperfunctions.R и выполняю код напрямую, для запуска кода требуется возраст. Помогает ли это, @ Роланд? –

+1

Я наблюдал то же самое и не знаю причины. Я думаю, что есть что-то в этом форуме на форумах поддержки RStudio. – Roland

ответ

1

Вопрос не source() и код консоли. Вместо этого возникает вопрос, как RStudio отправляет код из исходной панели на консоль.

Когда я копирую содержимое Helperfunctions.R и запускаю его в RGui (вместо RStudio), код выполняется с той же скоростью, что и при использовании source("Helperfunctions.R") в RStudio.

По-видимому, строки кода всегда (?) Требуют большего времени выполнения в RStudio, чем в RGui. Несмотря на то, что вы обычно не замечаете разницу во времени при выполнении нескольких строк в консоли, это, похоже, имеет огромное значение, когда, скажем, в консоли R Studio выполняется, скажем, 3.000 строк кода.

Полагаю, что при использовании source("Helperfunctions.R") в исходной панели RStudio код фактически не отправляется на консоль RStudio (которая была бы медленной), но фактически выполняется непосредственно на языке R.

Смежные вопросы