Я хочу использовать итерацию для преобразования записей в список в матрицу 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
Что здесь происходит?
Спасибо.
Вы пытаетесь вызвать 'colnames' в строке вместо имени объекта. Есть способы обойти это, но они обескураживают практику (как это использует 'assign'). Вместо вашего цикла 'for' создайте список с' lapply'. – alistaire
Это: 'colnames (вставка (cnames [i]," table ", sep =" _ ")) <- c (" A "," B ")' пытается установить 'colnames' только на один элемент (например, ' "Хонда"'). Вот почему ваши размеры отключены. – desc
Пример @alistaire с lapply? Я думаю, что вижу, что вы получаете от –