R中对象的串行修改

Rom*_*man 3 oop r

我有许多相同大小的矩阵:

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; 然而,它似乎没有这样的方式.

Dav*_*urg 6

我想创建所有的矩阵,用列表mgetls(根据您的矩阵的名称和一些正则表达式),然后修改它们一次全部使用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用作下一步的人.