将矩阵叠加到菱形方块算法输出

Overlaying a matrix to diamond square algorithm output

这是我几天前问的一个问题的部分重复,但正如有人指出的那样我做得非常糟糕,所以我很抱歉,我仍在学习如何最小化一切.所以我会分别问这两个部分,因为它可能会让其他人更容易找到答案,并首先实际回答(我希望)。

我使用了从 this website, which has the following output image

中找到的菱形方块算法 (DSQA)

我需要做的是在这个输出上叠加一个矩阵,然后用 "species" 填充它 - 创建一个生态系统,其中的物种占据 "terrain" 的不同层次。最终我想为 "species" 创建一个范围,但现在我只想知道如何以物种填充不同级别的方式覆盖矩阵(例如 "high/orange" 位置与 "lower/green"

处的坐标(?)不同

我创建的矩阵看起来像这样:

#Create Species Vector
species.v<-letters[1:5]
species.v<-as.character(species.v)
#Check species Vector
species.v
#Immigration Vector
immigration.lower<-letters[1:26]
immigration.vec<-toupper(immigration.lower)
immigration.vec

#Matrix creation (Random)
orig.neutral<- matrix(sample(species.v,25,replace=TRUE),
                      nrow=5,
                      ncol=5)

#Neutral Matrix
neutral.v0<-orig.neutral

#Create dice roll for replacement
dice.vector<-c(1:10)
dice.vector

#For loop and Ifs for replacement/immigration/speciation
for (i in 1:100) {{dice.roll<-sample(dice.vector,1)}###For Loop with IF functions
  if(dice.roll <= 7) {
    neutral.v0[sample(length(neutral.v0),1)]<-as.character(sample(neutral.v0,1))
  } else if (dice.roll > 7 & dice.roll < 10){
    neutral.v0[sample(length(neutral.v0),1)]<-as.character(sample(immigration.vec,1))
  } else if (dice.roll == 10){
    elIdx = sample(length(neutral.v0),1) #index of a randomly selected element
    neutral.v0[elIdx] = paste(neutral.v0[elIdx], "2", sep="")
  }}

替换等都是未来生态系统代码的一部分,最终将检查输入矩阵的物种是否在 DSQA 输出的正确 "range" 中。

但我需要知道的是如何 overlay/merge/create 这个矩阵与 DSQA 输出,这样矩阵就是输出的 部分 。目前不需要任何限制范围,我只是无法概念化如何将这两个单独的代码片段合并成一个我可以处理的东西。

所以在示例中,我的矩阵只有 5x5,但我不知道如何 create/specify DSQA 输出的大小,更不用说确保我的矩阵是 it/effected 的一部分了.我不知道对于一个简单的 5x5 矩阵,我的 DSQA 输出密度是否过高?我在我的项目中使用的实际矩阵是 1000x1000 但是对于一个例子来说这是不必要的大,正如@gregor 所指出的,因为我只需要知道如何做到这一点的概念,然后我可以将其应用到我的可笑大小 matrix/DSQA 输出。

我仍然不确定我是否解释得很好,但如有任何帮助,我们将不胜感激。

我发现我做错了什么,我没有将菱形平方算法的输出作为值矩阵,而是试图考虑在顶部叠加一个不同的矩阵。总而言之,我只需要参考菱形平方算法输出矩阵,而不是直接将其用作第二个更高矩阵的"base"。