gpt4 book ai didi

r - 有没有办法在不使用 R 中的 sample() 函数的情况下创建向量的排列?

转载 作者:行者123 更新时间:2023-12-04 08:33:26 27 4
gpt4 key购买 nike

我希望你有一个美好的一天。我想知道是否有办法在 R 中的向量中创建值的排列(重新排列)?
我的教授提供了一份作业,其中我们应该为随机化测试创建函数,一个使用 sample() 创建排列,另一个不使用 sample() 函数。到目前为止,我的所有努力都没有结果,因为我能找到的任何答案总是求助于使用 sample() 函数。我尝试了其他几种方法,例如使用 runif() 建立索引和编写自己的函数,但都无济于事。唉,我接受了失败,来到这里寻求救赎。
使用 sample() 函数时,代码如下所示:

#create the groups
a <- c(2,5,5,6,6,7,8,9)
b <- c(1,1,2,3,3,4,5,7,7,8)

#create a permutation of the combined vector without replacement using the sample function()
permsample <-sample(c(a,b),replace=FALSE)

permsample
[1] 2 5 6 1 7 7 3 8 6 3 5 9 2 7 4 8 1 5
而且,作为引用,我的函数的整个代码如下所示:
PermutationTtest <- function(a, b, P){
sample.t.value <- t.test(a, b)$statistic
perm.t.values<-matrix(rep(0,P),P,1)
N <-length(a)
M <-length(b)
for (i in 1:P)
{
permsample <-sample(c(a,b),replace=FALSE)
pgroup1 <- permsample[1:N]
pgroup2 <- permsample[(N+1) : (N+M)]
perm.t.values[i]<- t.test(pgroup1, pgroup2)$statistic
}
return(mean(perm.t.values))
}
我如何实现同样的事情,但不使用 sample() 函数并且在基础 R 的范围内?我的教授给出的唯一提示是“使用索引”。非常感谢您的帮助,祝您度过愉快的一天。

最佳答案

您可以使用 runif()生成一个介于 1.0 和最终数组长度之间的值。 floor()函数返回该数字的整数部分。在每次迭代中,我减小要选择的随机数的范围,将元素添加到 rn 中。 ' 原始数组的第 th 个位置到新数组并将其删除。

a <- c(2,5,5,6,6,7,8,9)
b <- c(1,1,2,3,3,4,5,7,7,8)

c<-c(a,b)

index<-length(c)
perm<-c()

for(i in 1:length(c)){
rn = floor(runif(1, min=1, max=index))
perm<-append(perm,c[rn])
c=c[-rn]
index=index-1
}


关于r - 有没有办法在不使用 R 中的 sample() 函数的情况下创建向量的排列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64919370/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com