split()作为R

时间:2017-10-08 02:43:07

标签: r split subset

我正在慢慢构建以下R例程。但我遇到了一些计算问题,我保证如何绕过。

K <- 2 # number of subarrays
N <- 100
Hstar <- 10
perms <- 10000

K1 <- c(1:8)
K2 <- c(9:10)

probs <- c(0.45, 0.45, rep(0.10/8, 8))

specs <- 1:N

pop <- array(dim = c(c(perms, N), K))

haps <- as.character(1:Hstar)

for(j in 1:perms){
    for(i in 1:K){ 
        if(i == 1){
            pop[j, specs, i] <- sample(haps, size = N, replace = TRUE, prob = probs)
        }
            else{
                pop[j ,, 1] <- sample(haps[K1], size = N, replace = TRUE, prob = probs[K1])
                pop[j ,, 2] <- sample(haps[K2], size = N, replace = TRUE, prob = probs[K2]) 
        }
    }
}

我想知道是否有办法将我的'haps'变量中的字符标签随机分配给多个子数组(在上面的示例中为K = 2),而不必同时指定K1和K2。

我在考虑使用像

这样的东西
split(sample(sample(haps, size = N, replace = TRUE, prob = probs), sample(1:K, size = N, replace = TRUE)

在else()语句中代替pop [j ,, 1]和pop [j ,, 2]。这样,根据每个子数组中出现的标签,我不必在我的else语句中对'haps'和'probs'进行子集化。

我的计划是将我的代码放在一个名为“HAC.sim”的函数中,以便我可以做到

HAC.sim(K, N, Hstar, probs, perms = 10000)

但是在当前的实现中,用户必须进入函数的内部代码才能添加另一个pop [j ,, i]如果他们想要包含2个以上的子数组,这不是很有效,特别是如果有的话是10个或更多的子阵列。

split()是否能够完成我需要的功能?我试过这个方法,但是,我得到错误“pop [j,specs,i]中的错误:矩阵上的下标数量不正确。”当我替换

pop[j ,, 1] <- sample(haps[K1], size = N, replace = TRUE, prob = probs[K1])
pop[j ,, 2] <- sample(haps[K2], size = N, replace = TRUE, prob = probs[K2])

上面的split()代码。

非常感谢任何帮助。如果不清楚,请告诉我。

0 个答案:

没有答案