2016-10-04 1 views
-2

Я хочу использовать итерацию для преобразования записей в список в матрицу 2x2, а затем назначать одинаковые имена столбцов и строк этим таблицам, а также целочисленные значения для ячеек матрицы.Использование функции вставки внутри colnames

Ради примеров давайте представим, что это список с записями, чьи имена я хочу превратиться в матрицах:

cnames <- c("Honda", "Toyota", "Nissan") 

Создание таблиц сами, кажется, прекрасно работают с Назначают функции:

for (i in 1:length(cnames)){ 
    assign(paste(cnames[i],"table",sep="_"), matrix(,nrow=2,ncol=2)) 
} 

Что, когда я типа, например:

> Honda_table 

... возвращается:

[,1] [,2] 
[1,] NA NA 
[2,] NA NA 

Но если в исходном итерационном функции Я пытаюсь присвоить имена столбцов, как, например:

for (i in 1:length(cnames)){ 
    assign(paste(cnames[i],"table",sep="_"), matrix(,nrow=2,ncol=2)) 
    colnames(paste(cnames[i],"table",sep="_")) <- c("A","B") 
    } 

... Я получаю эту ошибку, вместо этого:

Error : attempt to set 'colnames' on an object with less than two dimensions 

Я не» t понять, почему это происходит, поскольку после использования исходной функции назначения, если я просмотрю размеры любой из таблиц, например:

>dim(honda_table) 

... Я получаю:

[1] 2 2 

, который указывает, что это 2х2 мерный объект.

Кроме того, я не могу назначить заданные значения для матричных элементов, например, так:

for (i in 1:length(cnames)){ 
    assign(paste(cnames[i],"table",sep="_"), matrix(,nrow=2,ncol=2)) 
    paste(cnames[i],"table",sep="_")[1,1] = 1 
} 

... без получаю эту ошибку:

Error : incorrect number of subscripts on matrix 

Что здесь происходит?

Спасибо.

+0

Вы пытаетесь вызвать 'colnames' в строке вместо имени объекта. Есть способы обойти это, но они обескураживают практику (как это использует 'assign'). Вместо вашего цикла 'for' создайте список с' lapply'. – alistaire

+0

Это: 'colnames (вставка (cnames [i]," table ", sep =" _ ")) <- c (" A "," B ")' пытается установить 'colnames' только на один элемент (например, ' "Хонда"'). Вот почему ваши размеры отключены. – desc

+0

Пример @alistaire с lapply? Я думаю, что вижу, что вы получаете от –

ответ

1

Я не уверен, что это лучший и самый красивый, способ, но, кажется, работает:

for (i in 1:length(cnames)){ 
tab<- matrix(,nrow=2,ncol=2) 
colnames(tab)<- c("A","B") 
assign(paste(cnames[i],"table",sep="_"), tab) 
} 
rm(tab) 
+0

это может сработать, просто интересно, есть ли способ сделать это без функции назначения, если нет, я отвечу на этот ответ. Не могу поверить, что я не думал об этом. –

0

После долгих внушения я оказался выскабливание функцию назначающего и просто создали вектор таблиц вместо

 Смежные вопросы

  • Нет связанных вопросов^_^