首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >试图模拟R中的交易或不交易

试图模拟R中的交易或不交易
EN

Stack Overflow用户
提问于 2015-04-29 05:00:57
回答 1查看 99关注 0票数 1

我一直在这里寻找解决我的问题的办法,但我没有看到一个。

在R中,我试图为一个让我们熟悉软件的项目模拟交易或不交易。我计划这是一个大的循环,但我不能让我的第二个循环工作。我将其分解为便于阅读(对我来说是调试/测试)。

这个循环模拟了我们在整个游戏中选择的原始案例。

代码语言:javascript
复制
    for(i in 1){
    cases <- 1:26
    originalpick <- sample(cases, 1, replace = FALSE) #choose a case
    casesremaining <- (length(cases) - 1) #subtract original case from cases
    }

这个循环模拟了我们挑选的第一个要播放的案例。

代码语言:javascript
复制
    for(i in 1){
    casepicked <- replicate(1,sample(cases[-c(originalpick)], 1, replace = FALSE))
   }

我的问题是,我有可能再次选择我的原案。由于这个原因,我使用了示例,因为我可以关闭替换,而且由于这不起作用,我认为复制会有帮助。我已经看到了更新功能,但我似乎也无法让它发挥作用。

这本质上就是游戏,因为我必须选择案例,直到我剩下两个案例(最初的案例和从案例中留下的变量)。

我对R还很陌生,所以这可能只是我对功能的误解吗?任何帮助都将不胜感激!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-04-29 05:38:34

假设您想要模拟选择用例的顺序,则可以通过对sample的单个调用(如果要执行多个模拟,则用replicate包装)来完成这一任务。

例如:

代码语言:javascript
复制
set.seed(1)
cases <- 1:26
picks <- sample(cases)

picks
## [1]  7 10 14 21  5 19 23 13 12  2  4  3 25 22 24  6  8  9 16 11 26 17 15  1 18 20

当不提供额外的参数时,sample(x)只会置换向量x。上面,最初选择的案例是案例7,picks的其余元素代表随后选择的案例。

要执行多个模拟:

代码语言:javascript
复制
picks3 <- replicate(3, sample(cases))

##       [,1] [,2] [,3]
##  [1,]    1   12   21
##  [2,]   10    7   25
##  [3,]   21    2   11
##  [4,]    8    3   17
##  [5,]   11   25    9
##  [6,]   13   11    7
##  [7,]   25   14   16
##  [8,]    4    8    4
##  [9,]   15   17   13
## [10,]   12    5    3
## [11,]   24   19   19
## [12,]    2   18   23
## [13,]   22   10   20
## [14,]    6    4    1
## [15,]   20    6    8
## [16,]   23    9   10
## [17,]   14    1   12
## [18,]    5   16   24
## [19,]    9   23   14
## [20,]   16   26   15
## [21,]   26   21    5
## [22,]    3   24   22
## [23,]   17   15   26
## [24,]   19   22    2
## [25,]    7   13   18
## [26,]   18   20    6

现在,每一列都是对挑选顺序的独立模拟。

为了感兴趣,使用for循环一次模拟一个选择(例如,如果您想在过程中插入其他步骤),您可以执行如下操作(尽管有很多方法):

代码语言:javascript
复制
picks <- sample(cases, 1) # original pick
for (i in 2:length(cases)) { # subsequent picks
  remaining <- setdiff(cases, picks)
  picks[i] <- remaining[sample(length(remaining), 1)]
}

注意:我们使用remaining[sample(length(remaining), 1)]而不仅仅是sample(remaining, 1),因为在上一次迭代时,remaining将是一个数字(最后一个剩余情况的编号)。将单个数字(例如4 )传递给sample将导致sample(1:4, 1)而不是所需的sample(4, 1)。有关这方面的更多信息,请参见this post

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29934741

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档