【发布时间】:2021-10-17 12:02:32
【问题描述】:
我正在尝试将一些 Matlab 代码转换为 R。代码如下所示:
u= [.4 .5 .1;
.2 .4 .4;
.4 .1 .5]
z= find(cumsum(u)>= rand,1)
OUTPUT: e.g. z = 3
数学背景是这样描述的(来自数学 tut. 脚本):
我们创建一个包含列的累积和的向量(其中 我们知道总和为一),生成一个随机数(0-1),然后使用 查找函数以获取累积和向量中的第一个数字 即 >= 随机数。例如,如果我们的 D 向量是 [.5 .5] 50%的时候向量的元素对应的状态 一个将 >= 到随机数。 https://psyarxiv.com/b4jm6/
我尝试使用pracma 包中的find()(文档链接如下),但我不知道如何让它工作。我得到"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
【问题讨论】:
-
您在寻找
which(cumsum(u)>= runif(1))[1]吗? -
没有用。它应该对应于案例 k = find(x,n) 的这个 matlab 函数:de.mathworks.com/help/matlab/ref/find.html
-
k = find(x,n) 返回与 X 中的非零元素对应的前 n 个索引。
-
@RuiBarradas:不,它实际上似乎有效。谢谢!!!
-
请不要添加问题的答案。而是回答你自己的问题并接受它。