我有許多陣列要填充 R,每個陣列在特定模式中都有不同的名稱。我遇到的問題是我無法弄清楚如何將陣列名稱稱為變數,因此我可以在回圈內以系統的方式參考它們。例如,它們是使用此回圈創建的。
for (i in c(40,45,50,55,57,60,65)){
assign(paste0('hdd_',as.character(i),'_365_z'), rep(NA,365))}
我想填充這些陣列中的每一個,它們現在的名稱如下:hdd_40_365_z、hdd_45_365_z 等。
假設我想使用這樣的簡單函式填充每個陣列:
my_func <- function(value,doy){
return(value * doy/2)} # doy = doy or 1:365
我可以寫一個回圈來做到這一點:
for (j in c(40,45,50,55,57,60,65)){
for (k in 1:365){
# try to fill arrays one day at a time
paste0('hdd_',as.character(j),'_365_z')[k] <- my_func(j,k)}}
顯然,這行不通。我試過使用以下方法來做到這一點,但它不起作用。必須有一種方法可以做這樣的事情,我想,但我無法弄清楚 eval、parse、as.name 或其他東西的組合來做到這一點。任何幫助都會很棒。謝謝你。
eval(parse(text = paste0('hdd_',as.character(j),'_365_z')[k] <- my_func(j,k)))
uj5u.com熱心網友回復:
你很親近,尤其是因為你已經知道了assign。此外assign,訣竅在于get向量并將c的結果my_func連接到現有向量。
我們使用NULL而不是初始化物件NA,
for (i in c(40, 45, 50, 55, 57, 60, 65)) {
assign(paste0('hdd_', as.character(i), '_365_z'), NULL)
}
和c每個結果。
for (j in c(40, 45, 50, 55, 57, 60, 65)) {
for (k in 1:365) {
# try to fill arrays one day at a time
x <- paste0('hdd_', as.character(j), '_365_z')
assign(x, c(get(x), my_func(j, k)))
}
}
給出:
lapply(mget(ls(pattern='hdd')), head)
# $hdd_40_365_z
# [1] 20 40 60 80 100 120
#
# $hdd_45_365_z
# [1] 22.5 45.0 67.5 90.0 112.5 135.0
#
# $hdd_50_365_z
# [1] 25 50 75 100 125 150
#
# $hdd_55_365_z
# [1] 27.5 55.0 82.5 110.0 137.5 165.0
#
# $hdd_57_365_z
# [1] 28.5 57.0 85.5 114.0 142.5 171.0
#
# $hdd_60_365_z
# [1] 30 60 90 120 150 180
#
# $hdd_65_365_z
# [1] 32.5 65.0 97.5 130.0 162.5 195.0
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/390436.html
