【发布时间】:2015-06-08 12:35:10
【问题描述】:
大家!
如何生成满足某些条件的向量?
问题:生成一个向量a,使得length(a)=400000 由8 个元素组成:0, 5, 10, 50, 500, 5000, 50000, 300000。每个元素出现一定次数,分别为290205, 100000, 8000, 1600, 160, 32, 2, 1。此外,a 被分成 100 个连续元素的 4,000 个“组”;打电话给他们a_k, k=1,...,4000。这些组必须满足以下条件:
- 每组之和超过150,即
sum_i a_k_i>150代表所有k。 - 元素
5、10和50在每组中出现 25 到 29 次,即对于所有k,集合{i|a_i_k in (5,10,50)}的大小在 25 到 29 之间。 -
0在任何组中都不会连续出现超过 8 次。
我已经尝试了很多次,但它似乎不起作用: 我目前的代码如下:
T <- 4*10^(5) # data size
x <- c(0, 5, 10, 50, 500, 5000, 50000, 300000) #seed vector
t <- c(290205, 100000, 8000, 1600, 160, 32, 2, 1) #frequency
A <- matrix(0, 4000, 100) #4000 groups
k <- rep(0, times = 8) #record the number of seeds
for(m in 1:4000) {
p <- (t - k)/(T - 100*(m - 1)) #seed probability
A[, m] <- sample(x, 100, replace = TRUE, prob = p) #group m
sm <- 0
i <- 0
for(j in 1:92) {
if(sum(A[m,j:j + 8])==0){
if(A[m,j] > 0 & A[m,j] < 500) {i <- i+1}
sm <- sm+A[100*m+j]
}
else j <- 0
}
if (sm >= 150 & i > 24 & i < 30 & j != 0) {
m <- m + 1
for (n in seq_len(x)) {
k[n] <- sum(A[, m+1] == x[n]) + k[n]
}
}
}
【问题讨论】:
-
你能详细说明一下吗?谢谢你的 cmets
-
别在意之前的评论。我之前没有看你的代码。
-
这是一项艰巨的任务。我会创建一些小例子,比如样本 4 的值总和为 50,并且必须重复两次或其他条件。然后从那里构建技术。
-
关于第三个条件的一个歧义:
0可以永远连续出现超过 8 次,还是这个条件只在组内绑定?例如,a[95:105]==0可以吗? -
另一个问题:您是想提出 just one 这样的向量,还是要编写一个可以生成 many 这样的函数载体?如果你想要一个函数,该函数是否应该能够(理论上)产生所有这样的向量?