我正在为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
但是将它复制到一个新函数只会给我一些错误(我想知道它是否与该函数所存在的环境有关)
答案 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