Вот небольшая загадка для тех, кто хорошо разбирается в том, как оценщик R обрабатывает вызовы функций. Предположим, я хотел написать функцию, которая принимает оператор R, такой же, как то, что я написал бы в командной строке, и отображает как его, так и оцениваемый результат. Пример:
> p.eval(sum(1:3))
sum(1:3) --> 6
Это ' легко; вот определение p.eval ()
:
p.eval <- function(v,prefix="--> ") {
cmd <- deparse(substitute(v)); cat(cmd,prefix,v,"\n")
}
Но предположим, что теперь я хочу написать оболочку вокруг p.eval, чтобы она вызывалась таким же образом; возможно, как несколько безумный бинарный оператор с фиктивным вторым аргументом:
%PE% <- function(x,...) p.eval(x)
Я бы хотел вызвать его так: sum (1: 3)% PE% 0
должно быть эквивалентно старому ] p.eval (сумма (1: 3))
. Это, конечно, не работает, потому что deparse (substitute ())
из p.eval ()
теперь дает x
.
Вопрос к просветленный: есть ли способ заставить эту работу работать так, как я хочу? .. Для этого конкретного использования я вполне могу определить % PE%
, скопировав / вставив однострочное определение ] p.eval
, поэтому этот вопрос носит преимущественно академический характер. Может быть я' Я узнаю кое-что о мельчайших деталях оценщика R :)
PS: Почему можно найти полезными вышеупомянутые функции? .. Предположим, я разработал некоторый код анализа и вызываю его неинтерактивно через org-babel (что наиболее определенно стоит поиграть, если вы являетесь пользователем Org-режима и / или Emacs). По умолчанию org-babel игнорирует вывод, когда что-то оценивается в интерпретаторе. Таким образом, если я хочу получить что-либо, кроме необработанных чисел, я должен явно создать строки для печати с помощью cat
или paste
, но кто захочет сделать это, когда они летают через анализ? .. Приведенный выше прием позволяет вам просто добавить% PE% 0 после строки, которую вы хотите напечатать, и это перекликается с командой в выводе org. m пытается выполнить git svn dcommit
, однако один каталог продолжает у меня сбой и поэтому останавливает мою фиксацию и продолжает получать эту ошибку:
Файловая система не имеет элемента: Файл не найден: транзакция '43999 -6 ', path' / path / to / folder 'в / usr / local / git / libexec / git-core / git-svn line 572
Я попытался добавить папку обратно, но продолжаю получать эту ошибку. я могу удалить коммит из дерева, чтобы обойти это? Не знаю, что еще здесь делать.
редактировать
некоторые из следующих вопросов не полностью отвечают на мой вопрос, но, похоже, они в правильном направлении:
Последняя проблема, похоже, была тем, что я хотел, но с размером моего репо (в прошлый раз, мне потребовался целый рабочий день, чтобы проверить все это), и небольшой объем работы, который я потерял бы, просто выполнив жесткий
сброс (который в конечном итоге, казалось, сработал), я пошел на параметр жесткого
сброса.