我正在寻找一种方法来使变量具有允许的范围,可以将它们放置在基于钻石方形算法的地形上。变量以字母a-z的列表开始,并成为1,000乘1,000的随机分布矩阵。我从在线资源中复制了菱形方形算法(DSQA),虽然我理解如何它创建地形作为一个概念,但我不明白代码的哪些部分正在影响什么。无论哪种方式,我得到一个地形的输出,作为3D地形图和基于2D颜色的等高线图。
所以我需要做的是为变量创建一个范围,例如: A的范围为0.3,从"高度开始" 0,B的范围从0.3等高度开始。
我无法弄清楚,甚至在概念上,如何为DSQA提供这些变量的范围,到目前为止,我创建了两组代码(矩阵和算法输出)完全分开,不知道如何合并它们。我被告知主要是"忽略"算法代码,只需使用如下所示的输出:
我需要更改轮廓输出的大小以匹配我现有的矩阵(1,000 x 1,000),我也不知道该怎么做,我是否应该在算法代码中执行此操作,或者创建矩阵然后输入该算法的矩阵,反之亦然?
我的代码目前非常笨重,为此我道歉,它已经更改了相同基本矩阵的多个重复,但我已将它们作为文本文件上传到here,如果他们& #39;任何用途(显然只需要运行一次就可以获得矩阵和算法,我只需要为我正在做的事情重复多次)。我错过的每一次机会或者都不会想到一个让我这么做的非常简单的命令,但是现在它超出了我的技能,而且我有点不对劲远远超过我可以咀嚼!
任何帮助都会非常感激。
编辑:基于相同矩阵但只有5x5的更易于管理的代码段。
#Create Species Vector
species.v<-letters[1:5]
species.v<-as.character(species.v)
#Check species Vector
species.v
#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="")
}}
答案 0 :(得分:0)
我发现我做错了什么,而不是将菱形平方算法的输出作为值矩阵,我试图考虑在顶部覆盖不同的矩阵。长与短是我只需要参考菱形方算法输出矩阵,而不是直接将其用作&#34; base&#34;对于第二个更高的矩阵。
最终要给变量一个范围,我必须把它们放到一个数据框中,旁边的范围(例如col 1 = a,col 2 = min range,col 3 = max range),然后添加一个检查进入我的if函数,检查位置a是否位于分配给它的最小值/最大值范围内。