如何将列表元素映射到R中矩阵的colnames
我有一个没有colnames的矩阵,如下所示:如何将列表元素映射到R中矩阵的colnames,r,R,我有一个没有colnames的矩阵,如下所示: >my_matrix [,1] [,2] [,3] ENSG00000000345 1.324266e+03 1.071842e+03 1.024920e+03 ENSG00000000105 3.750147e+01 8.081121e+02 4.736242e+01 ENSG00000000719 3.216755e+0
>my_matrix
[,1] [,2] [,3]
ENSG00000000345 1.324266e+03 1.071842e+03 1.024920e+03
ENSG00000000105 3.750147e+01 8.081121e+02 4.736242e+01
ENSG00000000719 3.216755e+03 2.001329e+03 1.934501e+03
总共有280列和数千行
我还有两个元素向量的列表,如下所示:
> head(mapping)
[[1]]
[1] "100" "bob"
[[2]]
[1] "10" "alice"
[[3]]
[1] "1" "mark"
[[4]]
[1] "101" "simon"
[[5]]
[1] "102" "jeff"
[[6]]
[1] "103" "alexander"
inds <- as.numeric(lapply(mapping,function(x)x[1]))
nms <- lapply(mapping,function(x)x[2]) #unlist it if you need to
colnames(my_matrix)[inds] <- nms
列表中有280个向量。每个向量中的第一个元素是数字1到280。第二个元素是唯一的字符串
我想让矩阵的colname成为映射列表中唯一的字符串(每个向量的第二个元素),使用每个向量的第一个元素对应于矩阵的列索引
例如,第1列将是“标记”
我正在努力解决向量的顺序与矩阵列索引不一致的问题。如果是这样的话,像这样的事情就行了:
colnames(my_matrix) <- lapply(mapping, `[[`, 2)
colnames(我的矩阵)您可以尝试以下方法:
names.vec = sapply(mapping, unlist)[2,]
> names.vec
[1] "bob" "alice" "mark" "simon" "jeff" "alexander"
然后将它们指定为矩阵的列名
colnames(my_matrix) = names.vec
使用示例数据的前6个条目:
mapping = list()
mapping[[1]] = c("100", "bob")
mapping[[2]] = c("10", "alice")
mapping[[3]] = c("1", "mark")
mapping[[4]] = c("101", "simon")
mapping[[5]] = c("102", "jeff")
mapping[[6]] = c("103", "alexander")
> mapping
[[1]]
[1] "100" "bob"
[[2]]
[1] "10" "alice"
[[3]]
[1] "1" "mark"
[[4]]
[1] "101" "simon"
[[5]]
[1] "102" "jeff"
[[6]]
[1] "103" "alexander"
names.vec = sapply(mapping, unlist)[2,]
> names.vec
[1] "bob" "alice" "mark" "simon" "jeff" "alexander"
colnames(my_matrix) = names.vec
您可以尝试以下操作:
names.vec = sapply(mapping, unlist)[2,]
> names.vec
[1] "bob" "alice" "mark" "simon" "jeff" "alexander"
然后将它们指定为矩阵的列名
colnames(my_matrix) = names.vec
使用示例数据的前6个条目:
mapping = list()
mapping[[1]] = c("100", "bob")
mapping[[2]] = c("10", "alice")
mapping[[3]] = c("1", "mark")
mapping[[4]] = c("101", "simon")
mapping[[5]] = c("102", "jeff")
mapping[[6]] = c("103", "alexander")
> mapping
[[1]]
[1] "100" "bob"
[[2]]
[1] "10" "alice"
[[3]]
[1] "1" "mark"
[[4]]
[1] "101" "simon"
[[5]]
[1] "102" "jeff"
[[6]]
[1] "103" "alexander"
names.vec = sapply(mapping, unlist)[2,]
> names.vec
[1] "bob" "alice" "mark" "simon" "jeff" "alexander"
colnames(my_matrix) = names.vec
您可以获取索引的数字,并将它们放入向量中,对名称进行相同的处理,然后将其放入矩阵的colnames中,如下所示:
> head(mapping)
[[1]]
[1] "100" "bob"
[[2]]
[1] "10" "alice"
[[3]]
[1] "1" "mark"
[[4]]
[1] "101" "simon"
[[5]]
[1] "102" "jeff"
[[6]]
[1] "103" "alexander"
inds <- as.numeric(lapply(mapping,function(x)x[1]))
nms <- lapply(mapping,function(x)x[2]) #unlist it if you need to
colnames(my_matrix)[inds] <- nms
inds您可以获取索引的数字,并将它们放入一个向量中,对名称进行同样的处理,然后将其放入矩阵的colnames中,如下所示:
> head(mapping)
[[1]]
[1] "100" "bob"
[[2]]
[1] "10" "alice"
[[3]]
[1] "1" "mark"
[[4]]
[1] "101" "simon"
[[5]]
[1] "102" "jeff"
[[6]]
[1] "103" "alexander"
inds <- as.numeric(lapply(mapping,function(x)x[1]))
nms <- lapply(mapping,function(x)x[2]) #unlist it if you need to
colnames(my_matrix)[inds] <- nms
inds@akrun在评论中正确地回答了这个问题。守则:
m1 <- do.call(rbind, mapping); colnames(my_matrix)[as.numeric(m1[,1])] <- m1[,2]
m1@akrun在评论中正确地回答了这个问题。守则:
m1 <- do.call(rbind, mapping); colnames(my_matrix)[as.numeric(m1[,1])] <- m1[,2]
m1 Trym1@akrun这很有效。非常感谢。试试看m1@akrun,效果很好。非常感谢。