我有一个函数,它包含一个迭代160次的for循环,在每次迭代后产生一个三维数组。我希望for循环将每个数组分别保存为名称下的对象,例如array001
,array002
,array003
等,最好不要将它们分散到全局工作区。最后,我希望以后能够在同一个函数中调用其中的一些数组。
array.function <- function(df, parameter = 0) {
for (i in 1:160) {
DO A LOT OF STUFF
SAVE OUTPUT AS array###
}
DO MORE STUFF with arrays generated by for-loop above
}
关于如何将数组保存为具有相应数字的对象的任何想法?谢谢!
答案 0 :(得分:0)
来自lmo的评论是一个很好的可行解决方案,用于存储数组并在函数中稍后访问它们。但是,如果您确实希望将它们存储为单独的变量而不是列表,assign()
和get()
是您的朋友:
array.function <- function(df, parameter = 0) {
# This stores the function's environment for convenience:
env <- environment()
for ( i in 1:160 ) { # Then for each iteration
# make an array and store it in the function's environment
assign(paste0('array', i), array(c(i, 2:27), dim=c(3, 3, 3)))
}
# Then print out a randomly selected array to make sure it worked
print(get(paste0('array', sample(1:160, 1))))
# I don't know what you want to do with the arrays,
# for now just return the whole function's environment
# (the arrays as well as 'i', 'df', 'env', and 'parameter')
return(as.list(sapply(ls(envir=env), get, envir=env)))
}
x <- array.function(1) # the 1 is just because I kept your arguments
, , 1
[,1] [,2] [,3]
[1,] 158 4 7
[2,] 2 5 8
[3,] 3 6 9
, , 2
[,1] [,2] [,3]
[1,] 10 13 16
[2,] 11 14 17
[3,] 12 15 18
, , 3
[,1] [,2] [,3]
[1,] 19 22 25
[2,] 20 23 26
[3,] 21 24 27
对于循环的每次迭代,assign(paste0('array', i), value)
在函数环境中创建变量 - 而不是全局环境,至少不是默认情况 - 其名称是{{1}的结果并且其值为paste0('array', i)
(无论您创建什么数组)。您可以稍后使用value
访问它,其中get(paste0('array', x))
是您需要的数组编号。
了解更多有关功能环境的优秀资源是Hadley Wickham's book。