Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
重命名R中矩阵中的行和列名称,长度为';dimnames';[1] 不等于数组范围_R_Matrix_Dataframe - Fatal编程技术网

重命名R中矩阵中的行和列名称,长度为';dimnames';[1] 不等于数组范围

重命名R中矩阵中的行和列名称,长度为';dimnames';[1] 不等于数组范围,r,matrix,dataframe,R,Matrix,Dataframe,我想写一个函数来重命名矩阵的行和列 我的职能是 changeMatrixName<- function(mat){ nameRow<-vector(mode="character",length=nrow(mat)) nameCol<-vector(mode="character",length=ncol(mat)) nameCol<- colnames(mat) nameRow<- rownames(mat) #a

我想写一个函数来重命名矩阵的行和列

我的职能是

changeMatrixName<- function(mat){
     nameRow<-vector(mode="character",length=nrow(mat))
     nameCol<-vector(mode="character",length=ncol(mat))
     nameCol<- colnames(mat)
     nameRow<- rownames(mat)
     #annotation[annotation$probeID==c("ILMN_1814092","ILMN_1668851"),]$symbol
     rowGeneName<-vector(mode="character",length=nrow(mat))
     colGeneName<-vector(mode="character",length=ncol(mat))


     rowGeneName<-annotation[annotation$probeID==c(nameRow),]$symbol
     colGeneName<-annotation[annotation$probeID==c(nameCol),]$symbol
     row.names(mat)<-rowGeneName
     col.names(mat)<-colGeneName
     return(mat)
  }
当我跑的时候


test2如果没有数据,很难确定,但您几乎可以肯定需要以下内容:

rowGeneName <- annotation[match(nameRow, annotation$probeID),]$symbol
colGeneName <- annotation[match(nameCol, annotation$probeID),]$symbol
在这里,您将获取nameRow中的值,并将它们逐值与probeID的值进行比较,而不考虑其中的顺序。那些恰好匹配的将返回TRUE,因此通过将这两个向量并排放置,您将得到一个向量,其中包含随机匹配的数量

从另一个角度考虑,只有当
probeID
nameRow
nameconlumn
的长度完全相同,并且以与
nameRow
nameconlumn
相同的顺序包含完全相同的值时,上述表达式才会像预期的那样工作,此时,您可以直接将
rowGeneName
colGeneName
设置为等于
annotation$symbol


match
将实际搜索第二个向量中第一个向量的值,并返回匹配的第二个向量的索引位置。

您的意思是
rownames
colnames
而不是
row.names
col.names
,我基本上想更改矩阵的行名称和列名@Thomas@Thomas你知道答案吗?请花点时间阅读下面我的答案。我很确定我对你做错了什么是对的,不过,同样,如果你提供数据(包括
注释
),你会得到更好的答案。我无法将数据上载到此网站@BrodieGI将其更改为%in%,但顺序现在没有错…@BrodieGYou需要使用
match
<%中的code>%只是
match
的退化版本,如果左操作数中的值在右操作数中,则返回
TRUE
,但您需要知道左操作数中的值在右操作数中的何处,这可以通过
match
实现。请查看%中
%的文档,这也是
匹配的文档(
%in%
中的
%是通过
匹配实现的)。我可以收到您的电子邮件吗@BrodieG@ToBeGeek在回答你的问题的程度上,请考虑核对答案。谢谢
rowGeneName <- annotation[match(nameRow, annotation$probeID),]$symbol
colGeneName <- annotation[match(nameCol, annotation$probeID),]$symbol
annotation$probeID==c(nameRow)