R似乎记得历史上的所有命令,包括重复,这真的很烦人。如何改变这种行为?
例如,如果我运行这些命令
y = 3
x = rnorm(15)
x = rnorm(15)
我必须按三次键才能进入第一个命令。
答案 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)]