函数环境中的矩阵列表
List of matrices in function environment
我有一个涉及创建矩阵列表的函数。我使用 assign()
来命名该列表中的矩阵。这在全球环境中运作良好。但是,如果我在函数环境中使用此技术,则会收到 object not found
错误。我有一个解决方法是使用 envir = .GlobalEnv
作为 assign()
中的参数,但是,我认为这不是最好的解决方案(我不想用这些变量填充我的全局环境) .有没有更好的办法?这是一个示例代码:
my_function <- function(x){
my_list <- c()
for (i in 1:length(x)){
assign(paste("matrix", i, sep="_"), matrix(data = NA, nrow = 5, ncol = 4), envir = .GlobalEnv)
}
my_list <- lapply(paste("matrix", 1:length(x), sep="_"), get)
}
同样,如果我去掉上面的 envir = .GlobalEnv
参数,我会得到一个 object not found
错误
这对你有用吗?
my_list <- list()
my_function <- function(x){
for (i in 1:length(x)){
my_list[[paste("matrix", i, sep="_")]] <<- matrix(data = NA, nrow = 5, ncol = 4)
}
}
调用函数:
my_function(1:3)
旁注:
所以想法是在全局环境中将 my_list 声明为一个空列表。然后将每个元素推入其中。请注意要从 fun-envir 添加到 global-envir 中的 <<-
。
这确实不是设计解决方案的好方法。您应该将矩阵附加到列表中。
按照
的方式尝试一些东西
my_function <- function(x) {
mylist <- vector("list", length(x))
for (i in 1:length(x)) {
mylist[[i]] <- matrix(data = NA, nrow = 5, ncol = 4)
}
return(mylist)
}
> my_function(1:3)
[[1]]
[,1] [,2] [,3] [,4]
[1,] NA NA NA NA
[2,] NA NA NA NA
[3,] NA NA NA NA
[4,] NA NA NA NA
[5,] NA NA NA NA
[[2]]
[,1] [,2] [,3] [,4]
[1,] NA NA NA NA
[2,] NA NA NA NA
[3,] NA NA NA NA
[4,] NA NA NA NA
[5,] NA NA NA NA
[[3]]
[,1] [,2] [,3] [,4]
[1,] NA NA NA NA
[2,] NA NA NA NA
[3,] NA NA NA NA
[4,] NA NA NA NA
[5,] NA NA NA NA
我有一个涉及创建矩阵列表的函数。我使用 assign()
来命名该列表中的矩阵。这在全球环境中运作良好。但是,如果我在函数环境中使用此技术,则会收到 object not found
错误。我有一个解决方法是使用 envir = .GlobalEnv
作为 assign()
中的参数,但是,我认为这不是最好的解决方案(我不想用这些变量填充我的全局环境) .有没有更好的办法?这是一个示例代码:
my_function <- function(x){
my_list <- c()
for (i in 1:length(x)){
assign(paste("matrix", i, sep="_"), matrix(data = NA, nrow = 5, ncol = 4), envir = .GlobalEnv)
}
my_list <- lapply(paste("matrix", 1:length(x), sep="_"), get)
}
同样,如果我去掉上面的 envir = .GlobalEnv
参数,我会得到一个 object not found
错误
这对你有用吗?
my_list <- list()
my_function <- function(x){
for (i in 1:length(x)){
my_list[[paste("matrix", i, sep="_")]] <<- matrix(data = NA, nrow = 5, ncol = 4)
}
}
调用函数:
my_function(1:3)
旁注:
所以想法是在全局环境中将 my_list 声明为一个空列表。然后将每个元素推入其中。请注意要从 fun-envir 添加到 global-envir 中的 <<-
。
这确实不是设计解决方案的好方法。您应该将矩阵附加到列表中。
按照
的方式尝试一些东西my_function <- function(x) {
mylist <- vector("list", length(x))
for (i in 1:length(x)) {
mylist[[i]] <- matrix(data = NA, nrow = 5, ncol = 4)
}
return(mylist)
}
> my_function(1:3)
[[1]]
[,1] [,2] [,3] [,4]
[1,] NA NA NA NA
[2,] NA NA NA NA
[3,] NA NA NA NA
[4,] NA NA NA NA
[5,] NA NA NA NA
[[2]]
[,1] [,2] [,3] [,4]
[1,] NA NA NA NA
[2,] NA NA NA NA
[3,] NA NA NA NA
[4,] NA NA NA NA
[5,] NA NA NA NA
[[3]]
[,1] [,2] [,3] [,4]
[1,] NA NA NA NA
[2,] NA NA NA NA
[3,] NA NA NA NA
[4,] NA NA NA NA
[5,] NA NA NA NA