我有一个涉及创建矩阵列表的函数。我使用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
错误
答案 0 :(得分:1)
这件事对你有用吗?
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声明为全局环境中的空列表。然后将每个元素推入其中。请注意{you}想要从fun-envir添加到global-envir中的<<-
。
答案 1 :(得分:1)
这实际上不是设计解决方案的好方法。您应该将矩阵附加到列表中。
尝试一下
的内容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