From 4c16303100c3a3925f9e5c6bd9f2f81ca32c4ff7 Mon Sep 17 00:00:00 2001 From: eitsupi Date: Mon, 17 Jan 2022 16:48:38 +0000 Subject: [PATCH 1/6] add row limit setting of data viewer --- R/session/vsc.R | 19 +++++++++++++------ package.json | 5 +++++ 2 files changed, 18 insertions(+), 6 deletions(-) diff --git a/R/session/vsc.R b/R/session/vsc.R index 8f0505a9b..e6e4d304b 100644 --- a/R/session/vsc.R +++ b/R/session/vsc.R @@ -31,6 +31,7 @@ load_settings <- function() { vsc.browser = setting(session$viewers$viewColumn$browser, Disable = FALSE), vsc.viewer = setting(session$viewers$viewColumn$viewer, Disable = FALSE), vsc.page_viewer = setting(session$viewers$viewColumn$pageViewer, Disable = FALSE), + vsc.row_limit = setting(session$data$rowLimit, Disable = FALSE), vsc.view = setting(session$viewers$viewColumn$view, Disable = FALSE), vsc.helpPanel = setting(session$viewers$viewColumn$helpPanel, Disable = FALSE) )) @@ -340,13 +341,12 @@ if (show_view) { ) } - dataview_table <- function(data) { + dataview_table <- function(data, .nrow) { if (is.matrix(data)) { data <- as.data.frame.matrix(data) } if (is.data.frame(data)) { - nrow <- nrow(data) colnames <- colnames(data) if (is.null(colnames)) { colnames <- sprintf("V%d", seq_len(ncol(data))) @@ -357,14 +357,14 @@ if (show_view) { rownames <- rownames(data) rownames(data) <- NULL } else { - rownames <- seq_len(nrow) + rownames <- seq_len(.nrow) } colnames <- c("(row)", colnames) fields <- sprintf("x%d", seq_along(colnames)) data <- c(list(" " = rownames), .subset(data)) names(data) <- fields class(data) <- "data.frame" - attr(data, "row.names") <- .set_row_names(nrow) + attr(data, "row.names") <- .set_row_names(.nrow) columns <- .mapply(get_column_def, list(colnames, fields, data), NULL @@ -379,7 +379,8 @@ if (show_view) { } show_dataview <- function(x, title, uuid = NULL, - viewer = getOption("vsc.view", "Two")) { + viewer = getOption("vsc.view", "Two"), + row_limit = abs(getOption("vsc.row_limit", 0))) { if (missing(title)) { sub <- substitute(x) title <- deparse(sub, nlines = 1) @@ -438,7 +439,13 @@ if (show_view) { } } if (is.data.frame(x) || is.matrix(x)) { - data <- dataview_table(x) + .nrow <- nrow(x) + if (row_limit != 0 && row_limit < .nrow) { + title <- sprintf("%s (Limited to %s rows)", title, row_limit) + .nrow <- row_limit + x <- utils::head(x, n = .nrow) + } + data <- dataview_table(x, .nrow) file <- tempfile(tmpdir = tempdir, fileext = ".json") jsonlite::write_json(data, file, na = "string", null = "null", auto_unbox = TRUE) request("dataview", source = "table", type = "json", diff --git a/package.json b/package.json index c7712aa3c..b89a8e2e2 100644 --- a/package.json +++ b/package.json @@ -1448,6 +1448,11 @@ "default": true, "markdownDescription": "Emulate the RStudio API for addin support and other {rstudioapi} calls. Changes the option `vsc.rstudioapi` in R. Requires `#r.sessionWatcher#` to be set to `true`." }, + "r.session.data.rowLimit": { + "type": "integer", + "default": 0, + "markdownDescription": "The maximum number of rows to be displayed in the data viewer. `0` means no limit. Changes the option `vsc.row_limit` in R. Requires `#r.sessionWatcher#` to be set to `true`." + }, "r.session.viewers.viewColumn": { "type": "object", "markdownDescription": "Which view column should R-related webviews be displayed? Requires `#r.sessionWatcher#` to be set to `true`.", From 472b4c6b0fe2eaba8a9a0a13e15f3f14eb4234cc Mon Sep 17 00:00:00 2001 From: eitsupi Date: Wed, 19 Jan 2022 09:24:30 +0000 Subject: [PATCH 2/6] add setting to convert Apache Arrow Table to a data frame and display it in the data viewer --- R/session/vsc.R | 10 ++++++++++ package.json | 5 +++++ 2 files changed, 15 insertions(+) diff --git a/R/session/vsc.R b/R/session/vsc.R index e6e4d304b..92b66fc10 100644 --- a/R/session/vsc.R +++ b/R/session/vsc.R @@ -32,6 +32,7 @@ load_settings <- function() { vsc.viewer = setting(session$viewers$viewColumn$viewer, Disable = FALSE), vsc.page_viewer = setting(session$viewers$viewColumn$pageViewer, Disable = FALSE), vsc.row_limit = setting(session$data$rowLimit, Disable = FALSE), + vsc.show_arrow_table = setting(session$data$showArrowTable, Disable = FALSE), vsc.view = setting(session$viewers$viewColumn$view, Disable = FALSE), vsc.helpPanel = setting(session$viewers$viewColumn$helpPanel, Disable = FALSE) )) @@ -385,6 +386,15 @@ if (show_view) { sub <- substitute(x) title <- deparse(sub, nlines = 1) } + if (getOption("vsc.show_arrow_table", FALSE) && inherits(x, "ArrowTabular")) { + .nrow <- nrow(x) + if (row_limit != 0 && row_limit < .nrow) { + title <- sprintf("%s (Limited to %s rows)", title, row_limit) + .nrow <- row_limit + x <- utils::head(x, n = .nrow) + } + x <- as.data.frame(x) + } if (is.environment(x)) { all_names <- ls(x) is_promise <- rlang::env_binding_are_lazy(x, all_names) diff --git a/package.json b/package.json index b89a8e2e2..a253fc7c3 100644 --- a/package.json +++ b/package.json @@ -1453,6 +1453,11 @@ "default": 0, "markdownDescription": "The maximum number of rows to be displayed in the data viewer. `0` means no limit. Changes the option `vsc.row_limit` in R. Requires `#r.sessionWatcher#` to be set to `true`." }, + "r.session.data.showArrowTable": { + "type": "boolean", + "default": false, + "markdownDescription": "Show a Apache Arrow table as a data frame in the data viewer. Convert a `ArrowTabular` class object to a `data.frame` and then display it. Changes the option `vsc.show_arrow_table` in R. Requires `#r.sessionWatcher#` to be set to `true`." + }, "r.session.viewers.viewColumn": { "type": "object", "markdownDescription": "Which view column should R-related webviews be displayed? Requires `#r.sessionWatcher#` to be set to `true`.", From 1c6b8296da0198eec712d0e16c17c6e8d572353e Mon Sep 17 00:00:00 2001 From: eitsupi Date: Sat, 22 Jan 2022 06:12:47 +0000 Subject: [PATCH 3/6] fix --- R/session/vsc.R | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/R/session/vsc.R b/R/session/vsc.R index 92b66fc10..c4a08080e 100644 --- a/R/session/vsc.R +++ b/R/session/vsc.R @@ -31,8 +31,8 @@ load_settings <- function() { vsc.browser = setting(session$viewers$viewColumn$browser, Disable = FALSE), vsc.viewer = setting(session$viewers$viewColumn$viewer, Disable = FALSE), vsc.page_viewer = setting(session$viewers$viewColumn$pageViewer, Disable = FALSE), - vsc.row_limit = setting(session$data$rowLimit, Disable = FALSE), - vsc.show_arrow_table = setting(session$data$showArrowTable, Disable = FALSE), + vsc.row_limit = session$data$rowLimit, + vsc.show_arrow_table = session$data$showArrowTable, vsc.view = setting(session$viewers$viewColumn$view, Disable = FALSE), vsc.helpPanel = setting(session$viewers$viewColumn$helpPanel, Disable = FALSE) )) From 9eaee6e5e86f284c559098c7b120b4b4f73f5421 Mon Sep 17 00:00:00 2001 From: eitsupi Date: Wed, 2 Feb 2022 09:22:34 +0000 Subject: [PATCH 4/6] remove the show_arrow_table option --- R/session/vsc.R | 3 +-- package.json | 5 ----- 2 files changed, 1 insertion(+), 7 deletions(-) diff --git a/R/session/vsc.R b/R/session/vsc.R index c4a08080e..ad0ff6e7e 100644 --- a/R/session/vsc.R +++ b/R/session/vsc.R @@ -32,7 +32,6 @@ load_settings <- function() { vsc.viewer = setting(session$viewers$viewColumn$viewer, Disable = FALSE), vsc.page_viewer = setting(session$viewers$viewColumn$pageViewer, Disable = FALSE), vsc.row_limit = session$data$rowLimit, - vsc.show_arrow_table = session$data$showArrowTable, vsc.view = setting(session$viewers$viewColumn$view, Disable = FALSE), vsc.helpPanel = setting(session$viewers$viewColumn$helpPanel, Disable = FALSE) )) @@ -386,7 +385,7 @@ if (show_view) { sub <- substitute(x) title <- deparse(sub, nlines = 1) } - if (getOption("vsc.show_arrow_table", FALSE) && inherits(x, "ArrowTabular")) { + if (inherits(x, "ArrowTabular")) { .nrow <- nrow(x) if (row_limit != 0 && row_limit < .nrow) { title <- sprintf("%s (Limited to %s rows)", title, row_limit) diff --git a/package.json b/package.json index a253fc7c3..b89a8e2e2 100644 --- a/package.json +++ b/package.json @@ -1453,11 +1453,6 @@ "default": 0, "markdownDescription": "The maximum number of rows to be displayed in the data viewer. `0` means no limit. Changes the option `vsc.row_limit` in R. Requires `#r.sessionWatcher#` to be set to `true`." }, - "r.session.data.showArrowTable": { - "type": "boolean", - "default": false, - "markdownDescription": "Show a Apache Arrow table as a data frame in the data viewer. Convert a `ArrowTabular` class object to a `data.frame` and then display it. Changes the option `vsc.show_arrow_table` in R. Requires `#r.sessionWatcher#` to be set to `true`." - }, "r.session.viewers.viewColumn": { "type": "object", "markdownDescription": "Which view column should R-related webviews be displayed? Requires `#r.sessionWatcher#` to be set to `true`.", From 2ea9c7f643dc62672dce935e6791f772d9c5576e Mon Sep 17 00:00:00 2001 From: eitsupi Date: Wed, 2 Feb 2022 09:56:06 +0000 Subject: [PATCH 5/6] refactoring: functionize the processing to trunc data --- R/session/vsc.R | 28 ++++++++++++++-------------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/R/session/vsc.R b/R/session/vsc.R index ad0ff6e7e..925f3aaab 100644 --- a/R/session/vsc.R +++ b/R/session/vsc.R @@ -341,12 +341,13 @@ if (show_view) { ) } - dataview_table <- function(data, .nrow) { + dataview_table <- function(data) { if (is.matrix(data)) { data <- as.data.frame.matrix(data) } if (is.data.frame(data)) { + .nrow <- nrow(data) colnames <- colnames(data) if (is.null(colnames)) { colnames <- sprintf("V%d", seq_len(ncol(data))) @@ -381,17 +382,21 @@ if (show_view) { show_dataview <- function(x, title, uuid = NULL, viewer = getOption("vsc.view", "Two"), row_limit = abs(getOption("vsc.row_limit", 0))) { + as_truncated_data <- function(.data) { + .nrow <- nrow(.data) + if (row_limit != 0 && row_limit < .nrow) { + title <<- sprintf("%s (Limited to %s rows)", title, row_limit) + .data <- utils::head(.data, n = row_limit) + } + return(.data) + } + if (missing(title)) { sub <- substitute(x) title <- deparse(sub, nlines = 1) } if (inherits(x, "ArrowTabular")) { - .nrow <- nrow(x) - if (row_limit != 0 && row_limit < .nrow) { - title <- sprintf("%s (Limited to %s rows)", title, row_limit) - .nrow <- row_limit - x <- utils::head(x, n = .nrow) - } + x <- as_truncated_data(x) x <- as.data.frame(x) } if (is.environment(x)) { @@ -448,13 +453,8 @@ if (show_view) { } } if (is.data.frame(x) || is.matrix(x)) { - .nrow <- nrow(x) - if (row_limit != 0 && row_limit < .nrow) { - title <- sprintf("%s (Limited to %s rows)", title, row_limit) - .nrow <- row_limit - x <- utils::head(x, n = .nrow) - } - data <- dataview_table(x, .nrow) + x <- as_truncated_data(x) + data <- dataview_table(x) file <- tempfile(tmpdir = tempdir, fileext = ".json") jsonlite::write_json(data, file, na = "string", null = "null", auto_unbox = TRUE) request("dataview", source = "table", type = "json", From 6929f34c41e3974356d97c0be8e1907e32b41071 Mon Sep 17 00:00:00 2001 From: eitsupi Date: Wed, 2 Feb 2022 10:32:46 +0000 Subject: [PATCH 6/6] add the overall number of rows to the title --- R/session/vsc.R | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/R/session/vsc.R b/R/session/vsc.R index 925f3aaab..af1d25fed 100644 --- a/R/session/vsc.R +++ b/R/session/vsc.R @@ -385,7 +385,7 @@ if (show_view) { as_truncated_data <- function(.data) { .nrow <- nrow(.data) if (row_limit != 0 && row_limit < .nrow) { - title <<- sprintf("%s (Limited to %s rows)", title, row_limit) + title <<- sprintf("%s (limited to %d/%d)", title, row_limit, .nrow) .data <- utils::head(.data, n = row_limit) } return(.data)