1

R似乎记住了历史上的所有命令,包括重复的,这真的很烦人。如何改变这种行为?

例如,如果我运行这些命令

    y = 3
    x = rnorm(15)
    x = rnorm(15)

我必须按三下键才能到达第一个命令。

4

2 回答 2

3

如果您要过滤掉重复项而不考虑顺序,那么最简单的方法就是将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)
}
于 2013-06-11T16:21:08.857 回答
2

假设重复命令是与前一个命令相同的调用,无论顺序如何,您都可以简单地执行以下操作:

tmp <- tempfile()
savehistory(tmp)
hist <- readLines(tmp)
hist[! duplicated(hist)]

或者这个,保留命令的最后一个实例

hist[! duplicated(hist, fromLast=TRUE)]
于 2013-06-11T16:13:19.403 回答