Эмакс ESS:Эвальский регион против.источник()
Вопрос
Мне нравится комбинация 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»), поэтому вы можете быть уверены, что ваш скрипт самодостаточен (он вызывает нужные библиотеки, ваш лексически -области не ссылаются на непреднамеренные переменные в глобальном пространстве, которое вы забыли удалить, и т. д.).