我有许多相同大小的矩阵:
m1.m <- matrix(c(1,2,3,4), nrow=2, ncol=2)
m2.m <- matrix(c(5,6,7,8), nrow=2, ncol=2)
...
我想为所有这些设置统一的列名和行名。
目前我这样做:
new_col_names <- c("Col1","Col2")
new_row_names <- c("Row1","Row2")
change_names <- function(m, new_col_names, new_row_names) {
colnames(m) <- new_col_names
rownames(m) <- new_row_names
return(m)
}
m1.m <- change_names(m1.m, new_col_names, new_row_names)
m2.m <- change_names(m2.m, new_col_names, new_row_names)
...
有没有办法进行串行修改(在传递给函数时克服对象的复制)?到目前为止,我试图在lapply
内运行替换函数;但是,它似乎没有这种方式。
答案 0 :(得分:6)
我会使用mget
和ls
(以及根据矩阵名称的一些正则表达式)创建所有矩阵的列表,然后使用lapply
一次修改所有矩阵以及colnames<-
和rownames<-
替换功能。这些行之间的东西
l <- mget(ls(patter = "m\\d+.m"))
lapply(l, function(x) {
x <- `colnames<-`(x, new_col_names)
`rownames<-`(x, new_row_names)
})
# $m1.m
# Col1 Col2
# Row1 1 3
# Row2 2 4
#
# $m2.m
# Col1 Col2
# Row1 5 7
# Row2 6 8
通常建议您将对象保留在列表中而不是污染全局环境,因此尽量不要听任何会告诉您使用list2env
作为下一步的人。