我想使用迭代将列表中的条目转换为2x2矩阵,然后为这些表分配相同的列和行名称,以及矩阵单元格的整数值。
例如,让我们假装这是一个列表,其中包含我想要转换为矩阵的条目:
cnames <- c("Honda", "Toyota", "Nissan")
使用assign函数创建表本身似乎工作正常:
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
我不明白为什么会这样,因为在使用原始的assign函数之后,如果我查找任何表的维度,例如:
>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
这里发生了什么?
感谢。
答案 0 :(得分: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)
答案 1 :(得分:0)
经过多次建议后,我最终抓取了assign函数并简单地创建了一个表向量