Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/81.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 自动使用大量参数组合作为功能输入?_R - Fatal编程技术网

R 自动使用大量参数组合作为功能输入?

R 自动使用大量参数组合作为功能输入?,r,R,我试图在R中模拟大量的分布,在这个意义上,我为分布的不同参数生成分位数。我想创建一个包含大量这些参数组合的数据集。例如,使用正态分布: df<-data.frame(matrix(ncol=104,nrow=2)) colnames(df)<-c(as.character(seq(0,1,0.01),"type","mean","sd")) 这给了我一个数据框,其中101列表示0到1的分位数,步长为0.01,另外三列表示type、mean和sd,这是使用正态分布时唯一的参数 现在让

我试图在R中模拟大量的分布,在这个意义上,我为分布的不同参数生成分位数。我想创建一个包含大量这些参数组合的数据集。例如,使用正态分布:

df<-data.frame(matrix(ncol=104,nrow=2))
colnames(df)<-c(as.character(seq(0,1,0.01),"type","mean","sd"))
这给了我一个数据框,其中101列表示0到1的分位数,步长为0.01,另外三列表示type、mean和sd,这是使用正态分布时唯一的参数

现在让我们为正态分布族中的两个成员生成分位数:

qnorm.0.1<-qnorm(seq(0,1,0.01),0,1) #normal distribution / mean=0 /sd=1
qnorm.0.2<-qnorm(seq(0,1,0.01),0,2) #normal distribution / mean=0 /sd=2
现在我可以用两个向量填充数据帧:

df[1,]<-c(qnorm.0.1,"normal","0","1")
df[2,]<-c(qnorm.0.2,"normal","0","2")
这给了我需要的格式。 然而,当我试图创建具有许多参数组合的大型数据集时,例如,平均值从1到10000的每个组合以及sd从1到10000的每个组合,我必须想出一种方法来自动化这个过程。感谢您的帮助

谢谢大家!

也许这会有所帮助

library(data.table)
## Generate Parameters
param <- 0:9
## Generate Combinatios of par.
cb <- combn(par,2, simplify = F)
n <- length(cb)
## Input the parameters
DT <- lapply(cb, function(x){data.table(rbind(qnorm(seq(0, 1, 0.01),x)))})
DT <- rbindlist(DT)
DT[, `:=`(type=rep("normal",n),
          mean = unlist(cb)[seq(1, n*2, 2) ],
          sd = unlist(cb)[seq(2, n*2, 2) ])]
## Change names
setnames(DT, c(paste0("qnorm", seq(0, 1, 0.01)), "type", "mean", "sd"))
dim(DT)
[1]  45 104

head(DT[,95:104])
   qnorm0.94 qnorm0.95 qnorm0.96 qnorm0.97 qnorm0.98 qnorm0.99 qnorm1   type mean sd
1:  1.554774  2.644854  1.750686  2.880794  2.053749  3.326348    Inf normal    0  1
2:  1.554774  3.644854  1.750686  3.880794  2.053749  4.326348    Inf normal    0  2
3:  1.554774  4.644854  1.750686  4.880794  2.053749  5.326348    Inf normal    0  3
4:  1.554774  5.644854  1.750686  5.880794  2.053749  6.326348    Inf normal    0  4
5:  1.554774  6.644854  1.750686  6.880794  2.053749  7.326348    Inf normal    0  5
6:  1.554774  7.644854  1.750686  7.880794  2.053749  8.326348    Inf normal    0  6

当然,您可以增加参数的数量或更改分布函数,但结果将是类似的。

为什么不发布代码,显示您希望对少量参数组合执行的操作。您在寻找吗?expand.grid?好吧,在我的示例中,您可以使用for循环,例如:for i in 1:2{df[我,]@Ben Bolker:谢谢,这已经很有帮助了。expand.grid让我把for循环保持在一个层中:combI在想,参数的组合是你需要的,还是排列?因为组合会导致例如1平均值,2 sd,但不是相反,我想你需要排列,不是吗?谢谢,这是一个很好的开始不幸的是,其他发行版,例如qpareto,不会采用列表参数,但我相信我会找到解决方法:我认为你不会有问题,因为lapply会采用列表的每个元素,在这种情况下,它们是向量。但是,也许你可以给我一个例子。你可以试着用qpa来使用你的代码从rmutil包而不是qnorm中进行reto,它会告诉您,缺少一个参数,我发现这很有趣,因为两个发行版都将使用两个参数。但是,您可以使用mapply这样做:varYou实际上不需要mapply,它比Lappy慢。检查此项,将参数的组合生成为li圣cb