Загрузите файл .rda и переберите его объекты - PullRequest
0 голосов
/ 11 апреля 2019

Я загрузил файл rda, который в основном представляет собой список данных. Как мне перебрать объекты?

>load(data)
>attach(data)
 The following objects are masked _by_ .GlobalEnv:

GSE109597, GSE18897, GSE32575, GSE53232, GSE55205, GSE69039,
GSE83223, GSE87493, GSE98895
> R » objects()
[1] "GSE109597" "GSE18897"  "GSE32575"  "GSE53232"  "GSE55205"  "GSE69039" 
[7] "GSE83223"  "GSE87493"  "GSE98895" 

1 Ответ

3 голосов
/ 11 апреля 2019

Две мысли:

  1. Загрузите явно в новую пустую среду, а затем поработайте над ними там:

    e <- new.env(parent = emptyenv())
    load(filename, envir = e)
    out <- eapply(e, function(x) {
      # do something with x
    })
    
  2. С ?load, он возвращает "символьный вектор имен созданных объектов, невидимых" .Если вы захватите (невидимый) вектор, вы сможете сделать что-то вроде:

    nms <- load(data)
    for (nm in nms) {
      x <- get(nm)
      # do something with x
      # optional, save it back with assign(nm, x)
    }
    # or to capture all data into a list (similar to bullet 1 above)
    out <- lapply(lapply(nms, get), function(x) {
      # do something with x
    })
    

Я предпочитаю первое (основанное на окружающей среде) решение по нескольким причинам:

  • это будет никогда перезаписывать что-либо в .GlobalEnv ... узнав, что трудный путь с невоспроизводимыми проблемами , это огромно для меня
  • это поощряет подобный списку способ делать вещи, более важный, когда большинство или все объекты в файле .rda являются одной и той же "вещью" (например, рамка, список), и я планирую делать то же самоедействия для каждого из них
  • , если когда-либо возникнут сомнения относительно источника данных, это не будет загромождать мое пространство имен или глобальную среду
...