Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/67.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_Random_Experimental Design - Fatal编程技术网

操纵性田间试验设计的R函数-植物生态学

操纵性田间试验设计的R函数-植物生态学,r,random,experimental-design,R,Random,Experimental Design,我是一名植物生态学家,我想设计一个野外操纵实验。为了在试验区内的植物配置中实现良好的随机性,我想使用我熟悉的R 这张图片是设计的一个示意图:总共有6个地块,每个地块包含24种不同的植物。总的来说,我有36种植物,我想从中随机抽取每个地块的24种植物,地块之间的差异很大。每个物种应出现在6个地块中的4个地块中,但位置不同,沿边界两次出现两种暖色,两次出现在核心区域,每种冷色出现一次;在图中,我用4种不同的物种A、B、C、D直观地解释了我的意思 有人能提出一种方法来实现它,或者提出一些见解来编写函数

我是一名植物生态学家,我想设计一个野外操纵实验。为了在试验区内的植物配置中实现良好的随机性,我想使用我熟悉的R

这张图片是设计的一个示意图:总共有6个地块,每个地块包含24种不同的植物。总的来说,我有36种植物,我想从中随机抽取每个地块的24种植物,地块之间的差异很大。每个物种应出现在6个地块中的4个地块中,但位置不同,沿边界两次出现两种暖色,两次出现在核心区域,每种冷色出现一次;在图中,我用4种不同的物种A、B、C、D直观地解释了我的意思

有人能提出一种方法来实现它,或者提出一些见解来编写函数吗


我借鉴了和的一些见解。基本上,您可以创建一个循环矩阵并洗牌组

coords <- list(c(1,1),c(1,2),c(2,1),c(3,1),
c(1,3),c(1,4),c(2,4),c(3,4),
c(2,2),c(3,2),c(2,3),c(3,3),
c(4,1),c(5,1),c(6,1),c(6,2),
c(4,2),c(5,2),c(4,3),c(5,3),
c(4,4),c(5,4),c(6,3),c(6,4))

Matrix <- matrix(c(LETTERS,0:9)[1:36][matrix(1:36,36+1,36+1,byrow=T)[c(1,36:2),1:36]],36,36)
PlotLayouts <- Matrix[(1:6*6),1:24][,unlist(lapply(split(1:24,rep(1:6,each=4)),sample,4))]
PlotLayouts <- split(PlotLayouts,sample(1:6,6))

Result <- lapply(PlotLayouts,function(Vector){
  Layout <- matrix(NA,nrow=6,ncol=4)
  for(i in 1:24){
    Layout[coords[[i]][1],coords[[i]][2]] <- Vector[i]
  }
  Layout
})

#Species Counts
table(unlist(Result))
0 1 2 3 4 5 6 7 8 9 A B C D E F G H I J K L M N O P Q R S T U V W X Y Z 
4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 

Result
$`1`
     [,1] [,2] [,3] [,4]
[1,] "I"  "H"  "M"  "L" 
[2,] "K"  "R"  "S"  "N" 
[3,] "J"  "P"  "Q"  "O" 
[4,] "U"  "Z"  "0"  "2" 
[5,] "V"  "Y"  "X"  "1" 
[6,] "T"  "W"  "4"  "3" 

$`2`
     [,1] [,2] [,3] [,4]
[1,] "0"  "Z"  "4"  "3" 
[2,] "2"  "9"  "A"  "5" 
[3,] "1"  "7"  "8"  "6" 
[4,] "C"  "H"  "I"  "K" 
[5,] "D"  "G"  "F"  "J" 
[6,] "B"  "E"  "M"  "L" 
...

我花了很长时间才弄明白如何随机分组,但这很有趣,也很费劲。非常感谢伊恩!!这段代码的结果与我所寻找的非常相似,但在所有的矩阵中,都是相同的24个字母重复,而不是一个比拉丁字母长36个字母的子样本。另外,是否有办法避免字母在所有6个矩阵中重复,但仅在其中4个矩阵中重复?这很复杂,我知道…好的,这是36种。这不是随机的,但我想这会符合你的目的。太棒了!谢谢:最后一件事,如果你有时间/想继续帮助我,你认为有没有办法确保每个字符在矩阵的边缘出现两次,在内部区域2,2,2,3,3,2,3,3,3,4,4,3,5,2,5,3出现两次?现在它在边缘出现三次,在内部出现一次。我非常感谢你的帮助!