Вызывать объект из первых 5 символов, а не его полное имя в R? - PullRequest
0 голосов
/ 01 июня 2018

У меня есть объект, который называется PX557.GGH.WXWX.4986746 (пример).

Первые 5 символов этого объекта уникальны для этого объекта.

Как мне вызватьэтот объект только из первых 5 символов, вместо того, чтобы переименовывать его?

Есть ли определенный символ, который я могу добавить в конец PX557, который будет вызывать этот объект?

Спасибо

Ответы [ 2 ]

0 голосов
/ 01 июня 2018

Может быть излишним, но вот вспомогательная функция, которая ищет объект, используя первые несколько букв, и возвращает значение, если находит уникальный объект:

rm(list = ls())

g <- function(x) {
  x <- deparse(substitute(x))
  y <- grep(paste0("^", x), ls(envir = globalenv()), value = TRUE)
  if (length(y) > 1) {
    return(message("More than 1 match"))
  } else {
    tryCatch(
      get(y, envir = globalenv()),
      error = function(e) message(paste(x, "not found"))
    )
  }
}

PX557.GGH.WXWX.4986746 <- 123
AB123.GGH.WXWX.4986746 <- 456
PX556.FFG.JKJK.1234567 <- 789
g(PX557)
# [1] 123
g(AB123)
# [1] 456
g(AB1)
# [1] 456
g(AB999)
# AB999 not found
g(PX)
# More than 1 match
0 голосов
/ 01 июня 2018

Мы можем использовать функцию get и выполнять некоторые операции над вектором символов, возвращаемым ls:

# create some arbitrary objects
aaa_bbb_ccc <- 'foo'; bbb_ccc_aaa <- 'haz'; ccc_bbb_aaa <- 'mat'
# use substring on ls
get(ls()[substring(ls(), 1, 3) == 'aaa'])

[1] "foo"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...