重命名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)