來自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)
會在函數的環境變量 - 不是全球環境,至少不是默認的 - 其名稱是paste0('array', i)
的結果,其值是value
(無論您創建的是哪個數組)。您可以稍後使用get(paste0('array', x))
訪問它,其中x
是您需要的陣列號。
瞭解更多關於功能環境的優秀資源是Hadley Wickham's book。
將每個數組放入列表的單獨元素中。然後返回列表。就像'myList [[i]] < - array.function(df,i)'或其他。你可以用'paste''myList [[paste0(「array」,i)]] < - ...'添加名稱。 – lmo
謝謝。雖然在這種情況下,我將不得不將數組附加到函數內部的列表,然後在for循環完成填充列表之後,將列表元素索引到函數的更下方。我認爲這是你的意思。 –