在合域名

时间:2016-10-04 23:30:23

标签: r paste

我想使用迭代将列表中的条目转换为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

这里发生了什么?

感谢。

2 个答案:

答案 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函数并简单地创建了一个表向量