我正在使用RStudio并希望为特殊的data.frame定义一个View方法,但仍然保留现有的View方法用于标准的data.frame / matrix对象。
RStudio默认值:
View(x)
或单击“环境”窗格中的对象时,在“表格”浏览器中的“源”窗格中打开data.frame或矩阵对象。 当我尝试使用此代码重新定义方法时,我得到下面指出的行为。我的特殊对象以我想要的方式查看,但标准data.frame对象不再在Source窗格中调用电子表格类型的浏览器。
如何为我的对象添加新的View()
行为,同时保留原始行为?
iris_myclass <- iris
class(iris_myclass) <- c("myclass", "data.frame")
View(iris)
## opens a tabular data browser in the Source pane
View(iris_myclass)
## opens a tabular data browser in the Source pane
View <- function(x, title) {
UseMethod("View")
}
View.default <- function(x, title) {
utils::View(x, title)
}
View.myclass <- function(x, title) {
DT::datatable(x)
}
View(iris)
## opens an Xwindows Viewer
View(iris_myclass)
## opens an HTML datatable browser in the Viewer pane
我的设置:RStudio版本1.0.136和
R version 3.3.2 (2016-10-31)
Platform: x86_64-apple-darwin13.4.0 (64-bit)
Running under: macOS Sierra 10.12.2
locale:
[1] en_GB.UTF-8/en_GB.UTF-8/en_GB.UTF-8/C/en_GB.UTF-8/en_GB.UTF-8
attached base packages:
[1] stats graphics grDevices utils datasets methods base
other attached packages:
[1] DT_0.2
答案 0 :(得分:1)
它确实像这样工作:
View.default <- function(...) {
get('View', as.environment('package:utils'))(...)
}
utils::View
和mget('View')
返回不同的功能。正如@KevinUshey所解释的那样,Rstudio会覆盖搜索路径上的View
(package:utils
环境中),但不会覆盖utils
命名空间中的utils::View
。我们无法使用mget
访问它,但我们可以 get
。
使用mget
代替 int chosenImageNumber = (int) (Math.random() * images.length());
甚至更好一些(感谢@Willem)。