首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >寻找一种比在R中循环更有效的创建数据的方法

寻找一种比在R中循环更有效的创建数据的方法
EN

Stack Overflow用户
提问于 2013-07-29 22:56:43
回答 2查看 103关注 0票数 3

我正在尝试创建一个基于AcceptanceSampling库的表/数据文件,如下所示:

代码语言:javascript
运行
复制
library(AcceptanceSampling)
df<-NULL
for (aql in c(0.01,0.05)){
for (prp in c(0.95)) {
for (def in c(0.06,0.1,0.15)){
for (crp in c(0.05,0.08,0.10)){
df<-as.data.frame(rbind(df,c(aql,prp,def,crp,
                         find.plan(PRP=c(aql,prp),CRP=c(def,crp))$n,
                         find.plan(PRP=c(aql,prp),CRP=c(def,crp))$c
                         )))
}}}}

names(df)<-c("aql","prp","def","crp","n","Ac")

这给了我:

代码语言:javascript
运行
复制
    aql  prp  def  crp    n  Ac
1  0.01 0.95 0.06 0.05  127   3
2  0.01 0.95 0.06 0.08  116   3
3  0.01 0.95 0.06 0.10  110   3
4  0.01 0.95 0.10 0.05   61   2
5  0.01 0.95 0.10 0.08   55   2
6  0.01 0.95 0.10 0.10   52   2
7  0.01 0.95 0.15 0.05   30   1
8  0.01 0.95 0.15 0.08   27   1
9  0.01 0.95 0.15 0.10   25   1
10 0.05 0.95 0.06 0.05 5626 308
11 0.05 0.95 0.06 0.08 4826 266
12 0.05 0.95 0.06 0.10 4445 246
13 0.05 0.95 0.10 0.05  298  21
14 0.05 0.95 0.10 0.08  251  18
15 0.05 0.95 0.10 0.10  233  17
16 0.05 0.95 0.15 0.05   93   8
17 0.05 0.95 0.15 0.08   79   7
18 0.05 0.95 0.15 0.10   77   7

有人能指出一种更有效的方法来构建它吗?最好不要循环,并且不必为每一行调用两次find.plan()?

提前谢谢皮特

EN

Stack Overflow用户

发布于 2013-07-29 23:04:48

您可以这样使用expand.grid

代码语言:javascript
运行
复制
dat <- expand.grid(aql = c(0.01,0.05),prp = c(0.95),
            def = c(0.06,0.1,0.15), crp = c(0.05,0.08,0.10))

然后对每个语法糖使用data.table

代码语言:javascript
运行
复制
library(data.table)
DT <- as.data.table(dat)
DT[, c('n','Ac') := list(find.plan(PRP=c(aql,prp),CRP=c(def,crp))$n,
                         find.plan(PRP=c(aql,prp),CRP=c(def,crp))$c),
                           by = 1:nrow(DT)]

    aql  prp  def  crp    n  Ac
 1: 0.01 0.95 0.06 0.05  127   3
 2: 0.05 0.95 0.06 0.05 5626 308
 3: 0.01 0.95 0.10 0.05   61   2
 4: 0.05 0.95 0.10 0.05  298  21
 5: 0.01 0.95 0.15 0.05   30   1
 6: 0.05 0.95 0.15 0.05   93   8
 7: 0.01 0.95 0.06 0.08  116   3
 8: 0.05 0.95 0.06 0.08 4826 266
 9: 0.01 0.95 0.10 0.08   55   2
10: 0.05 0.95 0.10 0.08  251  18
11: 0.01 0.95 0.15 0.08   27   1
12: 0.05 0.95 0.15 0.08   79   7
13: 0.01 0.95 0.06 0.10  110   3
14: 0.05 0.95 0.06 0.10 4445 246
15: 0.01 0.95 0.10 0.10   52   2
16: 0.05 0.95 0.10 0.10  233  17
17: 0.01 0.95 0.15 0.10   25   1
18: 0.05 0.95 0.15 0.10   77   7

使用基本函数编辑,其思想是将find.plan矢量化。在这里,我像这样使用mapply

代码语言:javascript
运行
复制
 cbind(dat,with(dat,t(mapply(function(x,y,z,t)
                 find.plan(c(x,y),c(z,t)),aql,prp,def,crp))))

  aql  prp  def  crp    n   c   r
1  0.01 0.95 0.06 0.05  127   3   4
2  0.05 0.95 0.06 0.05 5626 308 309
3  0.01 0.95 0.10 0.05   61   2   3
4  0.05 0.95 0.10 0.05  298  21  22
5  0.01 0.95 0.15 0.05   30   1   2
6  0.05 0.95 0.15 0.05   93   8   9
7  0.01 0.95 0.06 0.08  116   3   4
8  0.05 0.95 0.06 0.08 4826 266 267
9  0.01 0.95 0.10 0.08   55   2   3
10 0.05 0.95 0.10 0.08  251  18  19
11 0.01 0.95 0.15 0.08   27   1   2
12 0.05 0.95 0.15 0.08   79   7   8
13 0.01 0.95 0.06 0.10  110   3   4
14 0.05 0.95 0.06 0.10 4445 246 247
15 0.01 0.95 0.10 0.10   52   2   3
16 0.05 0.95 0.10 0.10  233  17  18
17 0.01 0.95 0.15 0.10   25   1   2
18 0.05 0.95 0.15 0.10   77   7   8
票数 5
EN
查看全部 2 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17935591

复制
相关文章

相似问题

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