如何让R忽略历史中的重复条目?

时间:2013-06-11 15:55:00

标签: r configuration

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

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

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

我必须按三次键才能进入第一个命令。

2 个答案:

答案 0 :(得分: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)
}

答案 1 :(得分:2)

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

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

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

hist[! duplicated(hist, fromLast=TRUE)]