我想将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]])
}
我需要n
,min
&amp; max
从数据本身动态选择。
有人可以帮忙吗?
答案 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 ...