我有许多相同大小的矩阵:
m1.m <- matrix(c(1,2,3,4), nrow=2, ncol=2)
m2.m <- matrix(c(5,6,7,8), nrow=2, ncol=2)
...
Run Code Online (Sandbox Code Playgroud)
我想为所有这些设置统一的列和行名称.
目前我这样做:
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)
...
Run Code Online (Sandbox Code Playgroud)
有没有办法进行串行修改(在传递函数时克服对象的复制)?到目前为止,我试图在其中运行替换功能lapply; 然而,它似乎没有这样的方式.
我想创建所有的矩阵,用列表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
Run Code Online (Sandbox Code Playgroud)
通常建议将对象保留在列表中而不是污染全局环境,因此尽量不要听任何会告诉您将其list2env用作下一步的人.