Если вы фильтруете дубликаты вне зависимости от порядка, проще всего добавить pattern
аргумент history()
, например history(pattern="")
. Из-за особенностей history
реализации, даже имея pattern=""
будет иметь эффект фильтрации дубликатов:
> history
...
if (!missing(pattern))
rawhist <- unique(grep(pattern, rawhist, value = TRUE,
...))
...
И если вы заботитесь о порядке, а затем просто модифицируют функцию запас history
, например:
history_new = function(max.show = 25, reverse = FALSE, filter = FALSE, pattern, ...)
{
file1 <- tempfile("Rrawhist")
savehistory(file1)
rawhist <- readLines(file1)
unlink(file1)
# the modification to stock
if (filter)
rawhist <- rawhist[cumsum(rle(rawhist)$lengths)]
# end of modification
if (!missing(pattern))
rawhist <- unique(grep(pattern, rawhist, value = TRUE,
...))
nlines <- length(rawhist)
if (nlines) {
inds <- max(1, nlines - max.show):nlines
if (reverse)
inds <- rev(inds)
}
else inds <- integer()
file2 <- tempfile("hist")
writeLines(rawhist[inds], file2)
file.show(file2, title = "R History", delete.file = TRUE)
}
Что определяет дубликат? идентичный вызов? или идентичные строки? –
Например, запустите 'x = rnorm (15)' дважды. – qed
@ Вопрос Матфея Плурда заключается в том, является ли 'c; а; б; a' в вашей истории следует разделить на 'c; б; a'. Ваш запрос не является необоснованным, но я думаю, что это будет очень трудно обойтись без глубокого взлома. Более долгосрочный подход состоял бы в том, чтобы начать использовать рабочий процесс на основе сценария, где вы вводите свои команды в редактор, а затем отправляете их в R без изменения фокуса (через горячие клавиши в RStudio/emacs/vim/Eclipse ...) –