在r中使用runif

时间:2016-07-26 14:18:52

标签: r for-loop

我想将runif用于以下数据集:

   LB   UB   N
   500  600  20
   600  700  30
   700  800  1234
   ...

已将列转换为向量:

  c1<- as.list(d2[,c("N")])
  min=seq(500,2800,100)
  min=as.vector(min)
  max=seq(600,2900,100)
  max=as.vector(max)

循环播放:

for(i in seq(1,3,1)) 
 {
  p<- runif(c1[[i]],min=min[[i]],max=max[[i]])
 }

我需要nmin&amp; max从数据本身动态选择。 有人可以帮忙吗?

3 个答案:

答案 0 :(得分:1)

直接链接到包含您的边界和样本编号的数据框(在此示例中仅使用您上面给出的3行):

df <- read.table(text = 'LB   UB   N
                         500  600  20
                         600  700  30
                         700  800  1234',
                 header = TRUE)

p <- list()
for(i in 1:nrow(df)) {
  p[[i]] <- runif(df$N[i], min = df$LB[i], max = df$UB[i])
}

str(p)
# List of 3
# $ : num [1:20] 506 578 526 566 522 ...
# $ : num [1:30] 674 681 648 614 615 ...
# $ : num [1:1234] 782 744 746 744 784 ...

答案 1 :(得分:1)

您正在寻找Map来遍历数据框:

with(df, Map(runif, N, LB, UB))
#List of 3
# $ : num [1:20] 573 543 552 535 571 ...
# $ : num [1:30] 691 655 642 640 695 ...
# $ : num [1:1234] 703 739 705 705 759 ...

答案 2 :(得分:0)

你也可以去apply

set.seed(123)
l <- apply(df,1,function(x) runif(x[3],min=x[1],max=x[2]))

或使用by

l <- by(df,1:nrow(df),function(x) runif(x$N,min=x$LB,max=x$UB))

#lapply(l,head)

# [[1]]
# [1] 528.7578 578.8305 540.8977 588.3017 594.0467 504.5556 ...

# [[2]]
# [1] 688.9539 669.2803 664.0507 699.4270 665.5706 670.8530 ...

# [[3]]
# [1] 704.5831 744.2200 779.8925 712.1899 756.0948 720.6531 ...