如何访问/复制View功能?

时间:2017-10-26 11:46:54

标签: r rstudio

我正在为RStudio添加一个内容,它在Shiny中打开数据框的“增强”视图,允许您过滤和选择列,然后将该代码传递到{{1}中包含的命令行}。

向我建议的一个功能是在加载包时始终替换RStudio中的默认View(),以便始终加载我的新查看器。

我想要这个,但如果你愿意,还要保留使用RStudio View的能力。所以我尝试了这样的代码:

View

但这不起作用,因为View <- function(data_in, replace = T){ if (replace){ print('example') }else{ utils::View(data_in) } 与RStudio中的utils::View相同。但是,搜索View只会获得utils版本。我假设RStudio在加载时会覆盖?View,但我不知道如何访问它。我很乐意将该函数复制到名为save_view(或类似)的东西,但不知道如何访问它!在命令行中输入View可以得到以下代码

View

但是将它复制到一个新函数只会给我一些错误(我想知道它是否与该函数所存在的环境有关)

2 个答案:

答案 0 :(得分:3)

RStudio将内部View功能替换为您看到的功能。你可以使用

获得它
RStudioView <- as.environment("package:utils")$View

如果你打电话给那个,它应该做RStudio所做的。

您使用utils::View获得原始版本。

答案 1 :(得分:1)

这似乎是View()(来自utils)的来源:

function (x, title) 
{
  check <- Sys.getenv("_R_CHECK_SCREEN_DEVICE_", "")
  msg <- "View() should not be used in examples etc"
  if (identical(check, "stop")) 
    stop(msg, domain = NA)
  else if (identical(check, "warn")) 
    warning(msg, immediate. = TRUE, noBreaks. = TRUE, domain = NA)
  if (missing(title)) 
    title <- paste("Data:", deparse(substitute(x))[1])
  as.num.or.char <- function(x) {
    if (is.character(x)) 
      x
    else if (is.numeric(x)) {
      storage.mode(x) <- "double"
      x
    }
    else as.character(x)
  }
  x0 <- as.data.frame(x)
  x <- as.list(format.data.frame(x0))
  rn <- row.names(x0)
  if (any(rn != seq_along(rn))) 
    x <- c(list(row.names = rn), x)
  if (!is.list(x) || !length(x) || !all(sapply(x, is.atomic)) || 
    !max(lengths(x))) 
    stop("invalid 'x' argument")
  if (grepl("darwin", R.version$os)) 
    check_for_XQuartz()
  invisible(.External2(C_dataviewer, x, title))
}

非常清楚它正在调用C_dataviwer,这是数据查看器https://support.rstudio.com/hc/en-us/articles/205175388-Using-the-Data-Viewer#starting-the-viewer

编辑:

以下是dataviewer https://github.com/rstudio/rstudio/blob/5719361179d1020dc3157c4e24b21bcd17c483e6/src/cpp/session/modules/data/DataViewer.cpp

的实际代码