我正在嘗試將一些 Matlab 代碼轉換為 R。代碼如下所示:
u= [.4 .5 .1;
.2 .4 .4;
.4 .1 .5]
z= find(cumsum(u)>= rand,1)
OUTPUT: e.g. z = 3
數學背景是這樣描述的(來自數學 tut. 腳本):
我們制作一個包含列的累積和(我們知道 sum 為 1)的向量,生成一個亂數(0-1),然后使用 find 函式獲取累積和向量中的第一個數字,即 >=亂數。例如,如果我們的 D 向量是 [.5 .5] 50% 的時間,對應于狀態 1 的向量元素將 >= 亂數。https://psyarxiv.com/b4jm6/
我試圖find()從pracma包中使用(docu.link 下面),但我不知道如何讓它作業。我得到"dims[product...] do not match the length of object"或者大部分只是"is.character(what) is not TRUE"......
MATLAB函式:
k = find(x,n)
回傳對應于 X 中非零元素的前 n 個索引。 https://de.mathworks.com/help/matlab/ref/find.html
find()來自 R 包pracma,它似乎只能轉換find(x):https :
//www.rdocumentation.org/packages/pracma/versions/1.1.0/topics/find
uj5u.com熱心網友回復:
由@Rui Barradas 解決: which(cumsum(u)>= runif(1))[1]
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/329667.html
