Эмакс ESS:Эвальский регион против.источник()

StackOverflow https://stackoverflow.com/questions/1413853

  •  06-07-2019
  •  | 
  •  

Вопрос

Мне нравится комбинация Emacs ESS.Мне нравится отправлять строки, функции, регионы и буферы кода в командную строку для оценки без использования мыши.

Однако я заметил, что Eval Function команда в Emacs намного медленнее, чем простой запуск source("fns.R"), где fns.R — это файл, содержащий функцию, которую я хочу оценить.

Почему это так?

Это было полезно?

Решение

Я думаю, что у людей из списка ess есть лучшие ответы для вас. Но если вы оцениваете невидимо, обработка происходит намного быстрее. Попробуйте поместить это в свой файл .emacs:

(setq ess-eval-visibly-p nil)

Другие советы

Я просто предполагаю, но когда ты говоришь

  • source("fns.R") вы вообще не используете Emacs/ESS, а время вычислений — это просто время, которое R требуется для того, чтобы проглотить файл и переварить его — вероятно, очень мало, тогда как

  • Eval Function передает регион интерпретатору Emacs, который должен отправить его (предположительно построчно) в механизм R, который затем обрабатывает его по частям.

и это сделает второй подход медленнее.

Однако, по большому счету, кого это волнует?Я часто отправляю целые буферы или большие регионы, и это занимает, может быть, большую часть секунды?Я все еще думаю - как вы и говорите - что способность (многофункционального) редактора и основного языка взаимодействовать таким образом - это нечто чрезвычайно мощное.

Спасибо хакерам Emacs и команде ESS.

Если вы хотите выполнить весь свой буфер - если вы работаете в Unix / Linux, вы также можете запустить свой скрипт с помощью шебанга:

#!/usr/bin/Rscript

И сделайте ваш файл исполняемым

chmod 744 myscript.r

(я помню, читая Google, их сценарии r заканчиваются на .R, ну да ладно ...) и вы можете выполнить это следующим образом:

./myscript.r

И, с аргументами,

./myscript.r arg1 arg2

(который я фактически использовал для вызова функции R из системного вызова Matlab), и в вашем R-файле вы можете использовать

userargs = tail(commandArgs(),2) 

чтобы получить arg1 и arg2. Вы также можете обойтись без шебанга:

R --no-save < myscript.r arg1 arg2

и так далее. С Windows я помню, это было

R CMD BATCH myscript.r

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

Вы также можете использовать

echo 'source("myscript.r")' | R --no-save

также - преимущество использования этих методов перед запуском 'source (" myscript.r ") "непосредственно в R или R-буфере заключается в том, что вы начинаете с чистого рабочего пространства (хотя вы должны быть осторожны, чтобы ваш .Rprofile не будет загружен, пока вы не вызовете «source (" ~ / .Rscript ")» явно в «myscript.r»), поэтому вы можете быть уверены, что ваш скрипт самодостаточен (он вызывает нужные библиотеки, ваш лексически -области не ссылаются на непреднамеренные переменные в глобальном пространстве, которое вы забыли удалить, и т. д.).

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top