(非常)业余的编码员和统计学家正在研究 R 中的问题。
我有四个整数列表:A、B、C、D。
A <- [1:133]
B <- [1:266]
C <- [1:266]
D <- [1:133, 267-400]
我希望 R 从每个列表中选取 1 个项目来生成所有排列(我知道这段代码将永远运行),然后取每个排列的平均值。例如,[1, 100, 200, 400] -> 175.25。
理想情况下,我最终会得到所有这些方法的列表。
有什么想法吗?
最佳答案
对于较小但类似的问题,我将采用以下方法:
A <- 1:13
B <- 1:26
C <- 1:26
D <- c(1:13, 27:40)
mymat <- expand.grid(A, B, C, D)
names(mymat) <- c("A", "B", "C", "D")
mymat <- as.matrix(mymat)
mymeans <- rowSums(mymat)/4
如果你只增加所有索引,你可能会崩溃 R,但你可能会设置一个循环,如下所示(未测试):
B <- 1:266
C <- 1:266
D <- c(1:133, 267:400)
for(A in 1:133) {
mymat <- expand.grid(A, B, C, D)
names(mymat) <- c("A", "B", "C", "D")
mymat <- as.matrix(mymat)
mymeans <- rowSums(mymat)/4
write.table(mymat, file = paste("matrix", A, "txt", sep = "."))
write.table(mymeans, file = paste("means", A, "txt", sep = "."))
rm(mymat, mymeans)
}
获得全部。这仍然可能太大,在这种情况下,您可以执行嵌套循环,或循环 D
(因为它是最大的)
或者,
n <- 1e7
A <- sample(133, size = n, replace= TRUE)
B <- sample(266, size = n, replace= TRUE)
C <- sample(266, size = n, replace= TRUE)
D <- sample(x = c(1:133, 267:400), size = n, replace= TRUE)
mymeans <- (A+B+C+D)/4
将为您提供大量的方法样本,并且根本不需要时间。
hist(mymeans)
关于r - 从 R 中的四个整数列表生成所有可能的排列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13850818/