在 colnames 中使用粘贴功能

Using paste function within colnames

我想使用迭代将列表中的条目变成 2x2 矩阵,然后为这些表分配相同的列名和行名,并为矩阵单元格分配整数值。

为了举例,让我们假设这是一个列表,其中包含我想将其名称转换为矩阵的条目:

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

自己创建表似乎可以很好地使用分配函数:

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

当我输入时,例如:

> Honda_table

...returns:

   [,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

我不明白为什么会出现这种情况,因为在使用原始分配函数后,如果我查找任何表格的维度,例如:

>dim(honda_table)

...我得到:

[1] 2 2

这表示它是一个 2x2 维对象。

此外,我无法为矩阵单元格分配预设值,如下所示:

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

这是怎么回事?

谢谢。

我不确定这是最好的、最漂亮的方法,但似乎有效:

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)

经过多次建议后,我最终放弃了 assign 函数,而是简单地创建了一个表格向量