2014-10-31 2 views
2

Я создаю кадры данных в цикле. Имя фреймов данных должно быть комбинацией имени и числа (итерация циклов). Я использую функцию назначения для этого и работает. Я также хочу назначить имена строкам данных. Я пробовал два пути, но я получаю сообщения об ошибках, «цель назначения расширяется для неязыкового объекта», и «только первый элемент используется как имя переменной». Ниже приведен воспроизводимый пример, который я пытаюсь сделать.назначить имена ростов в цикле для построенных имен переменных

rows<-c("a","b") 
df<-data.frame(var1=c(1,2),var2=c(10,20)) 
for (n in 1:2){ 
    assign (paste("data",n,sep="_"),df) 
    rownames(get(paste("data",n,sep="_")))<-rows  # it doesn't work 
    assign(rownames(get(paste("data",n,sep="_"))),rows) # it doesn't work 
} 

Я хотел бы знать, почему это не работает и как его решить. Я нашел похожие темы, такие как this и this, но я не смог решить свой случай. Спасибо.

+0

Это было здесь много раз спрашивали. Ответ всегда «не делай этого». Вместо этого разместите свои данные в кадре. – Roland

ответ

1

Основываясь на комментарий Роланда, я пришел с этим решением:

rows<-c("a","b") 
df<-data.frame(var1=c(1,2),var2=c(10,20)) 
dfs<-list() 
for (n in 1:2){ 
    dfs[[n]]<-df 
    rownames(dfs[[n]])<-rows 
} 

список является ключом!

0

Или без списка, вам просто нужно фиктивную переменную:

rows<-c("a","b") 
df<-data.frame(var1=c(1,2),var2=c(10,20)) 
for (n in 1:2){ 
    assign (paste("data",n,sep="_"),df) 
    labelling <- get(paste("data",n,sep="_")) 
    labels <- rows 
    rownames(labelling)<-labels 
    assign(paste("data",n,sep="_"),labelling) 
} 
Смежные вопросы