Improve R pkg rj::tmp utilities
diff --git a/core/org.eclipse.statet.rj.server.rpkg/pkg/R/dataaccess.R b/core/org.eclipse.statet.rj.server.rpkg/pkg/R/dataaccess.R
index 9e0eb10..871f44b 100644
--- a/core/org.eclipse.statet.rj.server.rpkg/pkg/R/dataaccess.R
+++ b/core/org.eclipse.statet.rj.server.rpkg/pkg/R/dataaccess.R
@@ -133,6 +133,10 @@
rowIdxs
}
+sda002.getObject <- function(x.env, x.expr) {
+ eval(expr= x.expr)
+}
+
.getDataLevelValues <- function(x, max = 1000) {
if (is.factor(x)) {
diff --git a/core/org.eclipse.statet.rj.server.rpkg/pkg/R/init.R b/core/org.eclipse.statet.rj.server.rpkg/pkg/R/init.R
index 5b07649..73857cd 100644
--- a/core/org.eclipse.statet.rj.server.rpkg/pkg/R/init.R
+++ b/core/org.eclipse.statet.rj.server.rpkg/pkg/R/init.R
@@ -29,97 +29,6 @@
}
-## Tmp
-
-#' Returns the next available id (a element name with the specified prefix)
-#'
-#' @param prefix prefix of the element name, usually a key for a element type
-#' @param envir optional environment, default is \code{.rj.tmp}
-#' @return the id
-#' @returnType char
-tmp.createId <- function(prefix, envir = .rj.tmp) {
- i <- 1L;
- repeat {
- name <- paste(prefix, i, sep= "")
- if (!exists(name, envir = envir, inherits = FALSE)) {
- assign(name, NULL, envir= envir)
- return(name);
- }
- i <- i + 1L;
- }
-}
-
-tmp.set <- function(name, value, envir = .rj.tmp) {
- assign(name, value, envir= envir)
- return (invisible())
-}
-
-tmp.remove <- function(name, envir = .rj.tmp) {
- if (exists(name, envir= envir, inherits= FALSE)) {
- rm(list= name, envir= envir, inherits= FALSE)
- }
- return (invisible())
-}
-
-tmp.removeAll <- function(id, envir = .rj.tmp) {
- names <- ls(envir= envir, pattern= paste0("^\\Q", id, "\\E"))
- if (length(names)) {
- rm(list= names, envir= envir, inherits= FALSE)
- }
- return (invisible())
-}
-
-tmp.setReverseIndex <- function(name, index, len = NA, envir = .rj.tmp) {
- index = get(index, envir= envir, inherits= FALSE)
- if (is.na(len)) {
- len <- length(index)
- }
- index.r <- rep.int(NA_integer_, len)
- index.r[index] <- 1L:length(index)
- assign(name, index.r, envir= envir)
- return (invisible())
-}
-
-tmp.setWhichIndex <- function(name, filter, envir = .rj.tmp) {
- filter <- get(filter, envir= envir, inherits= FALSE)
- filter <- which(filter)
- assign(name, filter, envir= envir)
- return (invisible())
-}
-
-tmp.setFilteredIndex <- function(name, filter, index, envir = .rj.tmp) {
- filter <- get(filter, envir= envir, inherits= FALSE)
- index <- get(index, envir= envir, inherits= FALSE)
- if (length(dim(index)) > 1L) {
- idx <- index[,1L]
- index <- index[filter[idx],]
- }
- else {
- index <- index[filter[index]]
- }
- assign(name, index, envir= envir)
- return (invisible())
-}
-
-tmp.getFilteredCount <- function(index, filter, envir = .rj.tmp) {
- filter <- get(filter, envir= envir, inherits= FALSE)
- if (missing(index)) {
- return (sum(filter))
- }
- index <- get(index, envir= envir, inherits= FALSE)
- if (length(dim(index)) > 1L) {
- index <- index[,1L]
- }
- return (sum(filter[index]))
-}
-
-tmp.clear <- function(envir = .rj.tmp) {
- toRemove <- ls(envir= envir)
- toRemove <- toRemove[toRemove != "help"] # TODO Remove in RJ-1.2
- rm(list= toRemove, envir= envir)
-}
-
-
## Internal utils
.rj.errorHandler <- function(e) {
diff --git a/core/org.eclipse.statet.rj.server.rpkg/pkg/R/utils.R b/core/org.eclipse.statet.rj.server.rpkg/pkg/R/utils.R
new file mode 100644
index 0000000..08c7f70
--- /dev/null
+++ b/core/org.eclipse.statet.rj.server.rpkg/pkg/R/utils.R
@@ -0,0 +1,109 @@
+ #=============================================================================#
+ # Copyright (c) 2009, 2018 Stephan Wahlbrink and others.
+ #
+ # This program and the accompanying materials are made available under the
+ # terms of the Eclipse Public License 2.0 which is available at
+ # https://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0
+ # which is available at https://www.apache.org/licenses/LICENSE-2.0.
+ #
+ # SPDX-License-Identifier: EPL-2.0 OR Apache-2.0
+ #
+ # Contributors:
+ # Stephan Wahlbrink <sw@wahlbrink.eu> - initial API and implementation
+ #=============================================================================#
+
+
+## Client Utils
+
+
+#' Environment for temporary R objects
+.rj.tmp <- new.env()
+
+#' Returns the next available id (a element name with the specified prefix)
+#'
+#' @param prefix prefix of the element name, usually a key for a element type
+#' @param envir optional environment, default is \code{.rj.tmp}
+#' @return the id
+#' @returnType char
+tmp.createItem <- function(prefix, envir= .rj.tmp) {
+ i <- 1L;
+ repeat {
+ name <- paste0(prefix, i, ".");
+ if (!exists(name, envir= envir, inherits= FALSE)) {
+ assign(name, NULL, envir= envir);
+ return(name);
+ }
+ i <- i + 1L;
+ }
+}
+
+tmp.removeItem <- function(id, envir= .rj.tmp) {
+ names <- ls(envir= envir, pattern= paste0("^\\Q", id, "\\E"));
+ if (length(names)) {
+ rm(list= names, envir= envir, inherits= FALSE);
+ }
+ return (invisible());
+}
+
+tmp.set <- function(name, value, envir= .rj.tmp) {
+ assign(name, value, envir= envir);
+ return (invisible());
+}
+
+tmp.remove <- function(name, envir= .rj.tmp) {
+ if (exists(name, envir= envir, inherits= FALSE)) {
+ rm(list= name, envir= envir, inherits= FALSE);
+ }
+ return (invisible());
+}
+
+tmp.setReverseIndex <- function(name, index, len= NA, envir= .rj.tmp) {
+ index= get(index, envir= envir, inherits= FALSE);
+ if (is.na(len)) {
+ len <- length(index);
+ }
+ index.r <- rep.int(NA_integer_, len);
+ index.r[index] <- 1L:length(index);
+ assign(name, index.r, envir= envir);
+ return (invisible());
+}
+
+tmp.setWhichIndex <- function(name, filter, envir= .rj.tmp) {
+ filter <- get(filter, envir= envir, inherits= FALSE);
+ filter <- which(filter);
+ assign(name, filter, envir= envir);
+ return (invisible());
+}
+
+tmp.setFilteredIndex <- function(name, filter, index, envir= .rj.tmp) {
+ filter <- get(filter, envir= envir, inherits= FALSE);
+ index <- get(index, envir= envir, inherits= FALSE);
+ if (length(dim(index)) > 1L) {
+ idx <- index[,1L];
+ index <- index[filter[idx],];
+ }
+ else {
+ index <- index[filter[index]];
+ }
+ assign(name, index, envir= envir);
+ return (invisible());
+}
+
+tmp.getFilteredCount <- function(index, filter, envir =.rj.tmp) {
+ filter <- get(filter, envir= envir, inherits= FALSE);
+ if (missing(index)) {
+ return (sum(filter));
+ }
+ index <- get(index, envir= envir, inherits= FALSE);
+ if (length(dim(index)) > 1L) {
+ index <- index[,1L];
+ }
+ return (sum(filter[index]));
+}
+
+
+tmp.clear <- function(envir= .rj.tmp) {
+ toRemove <- ls(envir= envir, all.names= TRUE);
+ rm(list= toRemove, envir= envir, inherits= FALSE);
+}
+