将函数以最少的输入量应用于R中的最后一个结果

问题描述 投票:0回答:1

关于Twitter,我询问了以下内容:

在RStudio中,有一种简便的方法可以将存储在最后的结果.Last.value成功能。说我做了:

tbl <- CreateTable(x)

我现在想执行View(tbl),但要减少键入。只需输入

.View

或某物。那可能吗? #rstats #rstudio

也许有一般的方法可以做到这一点?

r read-eval-print-loop
1个回答
2
投票

[这里有几种方法,这些都是奇怪的东西,所以我希望您将其保留作交互式使用,不要在RProfile中放置任何内容,也不要使用这些方法共享代码:)。

1-创建.的绑定

.将是.Last.Value的快捷方式,从而节省了大多数键入操作。magrittr管道和功能序列仍然可以使用,purrr lambdas也可以。

makeActiveBinding(".", function() .Last.value, .GlobalEnv)
4
sqrt(.) # 2

[如果您有µλ或其他兼容的特殊字符,可在键盘上轻松访问,则最好改用它。

2--入侵print.function

我们可以破解print.function,因此它将在最后一个值上运行该函数。

这里我不能使用.Last.value,因为它是函数本身的值,所以我需要重新执行上一个调用,因此在某些情况下它可能很慢。

print.function <- function(x){
  tf <- tempfile()
  savehistory(tf)
  last_calls <- parse(text=tail(readLines(tf),2))
  if(as.list(last_calls[[2]])[[1]] == quote(print))
    base:::print.function(x) else print(x(eval.parent(last_calls[[1]])))
}
4
sqrt # 2
4
print(sqrt) # the actual definition

3-使用软件包有疑问

我们可以构建一个将使用.Last.value的可疑运算符:

# remotes::install_github("moodymudskipper/doubt")
library(doubt)
`?+` <- function(fun){ fun(.Last.value)}
4
?+sqrt # 2
© www.soinside.com 2019 - 2024. All rights reserved.