Arhn - архитектура программирования

R- как динамически называть фреймы данных?

У меня есть два типа файлов в моем каталоге. Каждый тип имеет либо текст «Drug_Rep», либо, если его нет, это означает, что это управляющий файл. Данные о наркотиках имеют повторы, количество которых может варьироваться, как и контроль. Я читаю файлы в цикле for следующим образом. Я хочу назвать свои кадры данных как X_Drug_Rep1, а затем следующий как X_Drug_Rep2 и так далее... и сохранить кадр данных для дальнейшей обработки. Сделайте то же самое для элементов управления... X_CONTROL_Rep1... X_CONTROL_Rep2... и так далее. Каков синтаксис для сохранения моих данных в фреймах данных, потому что мне нужно выполнить некоторые слияния и вычисления позже, чтобы наркотики реплицировали фреймы данных и элементы управления отдельно. вставка в левой части назначения, похоже, не работает. Какие-либо предложения?

for (f in 1:length(fileList)){
    fileName <- fileList[f]
    X <-read.xls(fileName)

    if(regexpr("Drug_Rep", fileName)[1]>0){
      print("DRUG")
      print(fileName)
      paste(X_Drug_Rep,i)<-X
      i=i+1
    }
    else{
      print("CONTROL")
      print(fileName)
      paste(X_CONTROL,j)<-X
      j=j+1
    }
  }

  • об этом много спрашивают. Технический ответ заключается в использовании assign, но предпочтительным подходом является создание списка (два в вашем случае). 23.06.2013
  • я нажал на ссылку, но все равно не могу правильно понять синтаксис назначения... это то, что я делаю: назначаю (вставить (X_Drug_Rep, i, sep = '_'), i) 23.06.2013
  • Спасибо! я делаю следующее: назначаю (вставить (X_Drug_Rep, i, sep = '_'), X), как вы предложили, но как я могу получить доступ к моему новому фрейму данных с именем X_Drug_Rep_1 23.06.2013
  • X_Drug_Rep_1 — это объект, поэтому вы можете просто получить к нему доступ, набрав X_Drug_Rep_1. Если вы имеете в виду, как вы можете получить к нему доступ через переменную типа i <- 1, об этом также часто спрашивают. Технический ответ состоит в том, чтобы использовать get, но предпочтительный подход состоит в том, чтобы для начала иметь все ваши объекты в списке. Отсюда моя рекомендация еще раз: используйте список! 23.06.2013
  • когда я печатаю (X_Drug_Rep_1), я получаю сообщение об ошибке: Ошибка в печати (X_Drug_Rep_1): объект «X_Drug_Rep_1» не найден ... так что это то, что я спрашивал. Причина, по которой я хочу X_Drug_Rep_1,X_Drug_Rep_2,X_Drug_Rep_3, заключается в том, что я сделаю слияние своих фреймов данных позже в коде. Спасибо. 23.06.2013
  • Как упоминалось выше, вы можете использовать assign для этой цели, но не должны. Вы можете присвоить имена списку после его создания с помощью names(myList) <- .... Это намного понятнее, менее подвержено ошибкам и приведет к гораздо более короткому коду. 23.06.2013

Ответы:


1

ОП действительно борется, поэтому вместо длинного комментария я покажу его здесь. Плевать, если это закроют.

Технический (не делайте этого ответа) будет использовать assign:

i <- 1
j <- 1
for (f in 1:length(fileList)){
    fileName <- fileList[f]
    X <-read.xls(fileName)

    if(grepl("Drug_Rep", fileName)) {
      print("DRUG")
      print(fileName)
      assign(paste("X_Drug_Rep", i, sep = '_'), X)
      i <- i+1
    } else {
      print("CONTROL")
      print(fileName)
      assign(paste("X_CONTROL", i, sep = '_'), X)
      j <- j+1
    }
  }

Но, как мы рекомендовали, вместо этого вы должны использовать списки. Используя цикл for, это будет выглядеть так:

X_Drug_Rep <- list()
X_CONTROL  <- list()
i <- 1
j <- 1
for (f in 1:length(fileList)){
    fileName <- fileList[f]
    X <-read.xls(fileName)

    if(grepl("Drug_Rep", fileName)) {
      print("DRUG")
      print(fileName)
      X_Drug_Rep[[i]] <- X
      i <- i+1
    } else {
      print("CONTROL")
      print(fileName)
      X_CONTROL[[j]] <- X
      j <- j+1
    }
  }

Наконец, как будет выглядеть ваш код без цикла for:

drug.rep.files <- grep("Drug_Rep", fileList, value = TRUE)
control.files  <- grep("Drug_Rep", fileList, value = TRUE, invert = TRUE)

X_Drug_Rep <- lapply(drug.rep.files, read.xls)
X_CONTROL  <- lapply(control.files, read.xls)

Короче, нет?! Опять же, это создает два списка. Например, вместо X_Drug_Rep_1 вы получите доступ к первому элементу Drug_Rep, выполнив X_Drug_Rep[[1]].

23.06.2013
Новые материалы

Коллекции публикаций по глубокому обучению
Последние пару месяцев я создавал коллекции последних академических публикаций по различным подполям глубокого обучения в моем блоге https://amundtveit.com - эта публикация дает обзор 25..

Представляем: Pepita
Фреймворк JavaScript с открытым исходным кодом Я знаю, что недостатка в фреймворках JavaScript нет. Но я просто не мог остановиться. Я хотел написать что-то сам, со своими собственными..

Советы по коду Laravel #2
1-) Найти // You can specify the columns you need // in when you use the find method on a model User::find(‘id’, [‘email’,’name’]); // You can increment or decrement // a field in..

Работа с временными рядами спутниковых изображений, часть 3 (аналитика данных)
Анализ временных рядов спутниковых изображений для данных наблюдений за большой Землей (arXiv) Автор: Рольф Симоэс , Жильберто Камара , Жильберто Кейрос , Фелипе Соуза , Педро Р. Андраде ,..

3 способа решить квадратное уравнение (3-й мой любимый) -
1. Методом факторизации — 2. Используя квадратичную формулу — 3. Заполнив квадрат — Давайте поймем это, решив это простое уравнение: Мы пытаемся сделать LHS,..

Создание VR-миров с A-Frame
Виртуальная реальность (и дополненная реальность) стали главными модными терминами в образовательных технологиях. С недорогими VR-гарнитурами, такими как Google Cardboard , и использованием..

Демистификация рекурсии
КОДЕКС Демистификация рекурсии Упрощенная концепция ошеломляющей О чем весь этот шум? Рекурсия, кажется, единственная тема, от которой у каждого начинающего студента-информатика..