Я использую RStudio и хочу определить метод View для специально классифицированного data.frame, но сохраняю существующий метод View для стандартного объекта data.frame/matrix.Как я могу перегрузить функцию просмотра RStudio для пользовательских фреймов данных?
RStudio по умолчанию:
- data.frame или матрица объектов открыть в текстовом браузере, в панели источников, при использовании
View(x)
или при нажатии на объект в области окружающей среды.
Когда я пытаюсь переопределить методы, используя этот код, я получаю приведенное ниже поведение. Мой специально классифицированный объект просматривает то, что я хочу, но стандартные объекты data.frame больше не вызывают браузер типа таблицы в области «Источник».
Как добавить новое поведение 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
Спасибо, что работает! Есть ли способ сделать это * без * переопределения общего? Так что, когда мой пакет подключен, я не получаю предупреждения NAMESPACE с помощью 'utils :: View', после переопределения объекта как общего? –
Обратите внимание, что исходный 'View' не является общим, отправка не производится, он просто коэрцирует все на data.frame. Не уверен, что делать с конфликтом имени. – Axeman
Совершенно верно, я должен был сказать: «без переопределения« Просмотр »как общего». ('sample' - это другая функция, которую я должен переопределить как общий в моем пакете, что создает еще одну заметку о конфликте для пользователей, которую они находят страшной, но не имеет никакого эффекта, поскольку методы' .default' называет ранее существовавшие не общие.) –