Как назначить имя для фреймов данных в цикле? В R - PullRequest
0 голосов
/ 18 января 2019

У меня есть 10 файлов, для простоты давайте назовем их A: J. Я хочу прочитать их, используя цикл for, который считывает их и присваивает им имя из вектора имен.

Это мой код:

i=1:10
name<-c("A", "B", "C", "D", "E", "F","G","H","I","J")
file<-c("A.txt", "B.txt", "C.txt", "D.txt", "E.txt",        
"F.txt","G.txt","H.txt","I.txt","J.txt")

for (i in 1:7){
tmp<-read.table(file[i],sep="\t",header=TRUE) %>% 
assign(name[i])
} 

Это приводит к: Error in assign(., species[i]) : invalid first argument

Ответы [ 3 ]

0 голосов
/ 18 января 2019

Альтернативный подход к @ user2974951 - сохранить все файлы в списке с именем dataFiles.

name<-c("A", "B", "C", "D", "E", "F","G","H","I","J")
file<-c("A.txt", "B.txt", "C.txt", "D.txt", "E.txt",        
        "F.txt","G.txt","H.txt","I.txt","J.txt")

dataFiles = list()
for(i in 1:length(file)) {
  dataFiles[[LETTERS[i]]] = read.table(file[i],sep="\t",header=TRUE)
}

> names(dataFiles)
 [1] "A" "B" "C" "D" "E" "F" "G" "H" "I" "J"

Я здесь использую ПИСЬМА для присвоения имен, но вполне может быть:

name[i]
0 голосов
/ 18 января 2019

Цикл for можно заменить на sapply:

dat<-sapply(name,function(x) assign(x,read.table(paste0(x,".txt"),,sep="\t",header=TRUE)), USE.NAMES=TRUE, simplify=FALSE)

При этом создается один список (называемый «dat»), в котором каждый элемент в нем именуется с использованием элементов «name» и содержит таблицу в файле (name) .txt.

0 голосов
/ 18 января 2019

Здесь есть пара неправильных вещей, я предполагаю, что разновидность - это какой-то вектор из tmp, если вам нужно сослаться на это. Вы также забыли присвоить имя переменной

name<-c("A", "B", "C", "D", "E", "F","G","H","I","J")
file<-c("A.txt", "B.txt", "C.txt", "D.txt", "E.txt",        
        "F.txt","G.txt","H.txt","I.txt","J.txt")

for (i in 1:10){
  tmp<-read.table(file[i],sep="\t",header=TRUE)
  assign(paste0("v",i),species[i])
} 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...