我有一個多維數組(B_matrix),我需要填充一些隨機值。由於維度取決於用戶定義的兩個參數K和C,因此我不能使用嵌套循環來填充數組,因此我決定遞歸填充它。以R語言遞歸填充數組
遞歸函數(fillUp)的問題是,即使數組在函數外聲明,該函數運行後數組也被設置爲NULL。
B_dim = rep(2,((K+1+C)*2))
B_matrix = array(dim = B_dim, dimnames = NULL)
string = c()
fillUp<-function(level, string){
if (level>=1){
for(i in c(1,2)){
Recall(level-1, c(string, i))
}
}else{
B_matrix[string] = 1;
}
}
fillUp(length(B_dim), string)
> sum(B_matrix == 1)
[1] NA
我是R新手,所以我不確定「全局」聲明是否允許fillUp更改矩陣的值。
編輯: 注意,線
B_matrix[string] = 1;
只是測試情況下,與原來的想法是分配取決於該陣列元件的位置的一些隨機值。
EDIT2:
基於什麼@Bridgeburners暗示,我幾乎沒有。通過
assign('str', matrix(string,1), envir=.GlobalEnv)
assign('hl', B_half_length, envir=.GlobalEnv)
rul <-runif(1, 0, sum(str[1:hl]))
with( .GlobalEnv,B_matrix[str] <- rul)
我的錯誤(最後一行)更換B_matrix [字符串] = 1:
Error in eval(expr, envir, enclos) : object 'rul' not found
的問題,我想,是我與變量的工作從兩個不同的環境與此同時。我不知道如何在這裏繼續。
此選項無法正常工作或
assign('str',matrix(string,1), envir=.GlobalEnv)
assign('hl', B_half_length, envir=.GlobalEnv)
assign('ru', runif(1, 0, sum(str[1:hl])), envir=.GlobalEnv)
with( .GlobalEnv,B_matrix[str] <- ru)
Note: no visible binding for global variable 'ru'
EDIT3:
我終於解決了它:
assign('str',matrix(string,1), envir=.GlobalEnv)
with( .GlobalEnv, B_matrix[str] <- runif(1, 0, sum(str[1:B_half_length])-B_half_length+1) )
其中B_half_length是一個全局變量
這是什麼功能(字)的目標是什麼?在R函數中,您不應該嘗試修改函數範圍之外的對象;相反,你從你的函數返回修改後的對象。我只是很難理解這段代碼的意圖和期望的輸出。請做一個更完整的[可重現的例子](http://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-example) – MrFlick
這個想法是用一些隨機函數它的參數取決於數組元素的位置,但是如果我不能指定一個常數值(1),我將無法走得更遠... – user3889486
我不明白爲什麼你認爲你需要在這裏遞歸。同樣,由於這個特殊的例子不可重現,也沒有需要驗證的輸出,所以建議「適當的」選擇是非常困難的。 – MrFlick