R图上的Hegyi指数

R图上的Hegyi指数,r,loops,indexing,R,Loops,Indexing,我想在没有siplab的情况下使用Hegyi索引作为我的数据。到目前为止,这超出了我的可能性。 我在Windows7上使用R Studio。 公式是 因此,在目标树周围的某个半径内,称为CZR,将所有的树都放到那里,将它们的直径d除以目标树的直径。然后将结果除以两者之间的距离。比赛区内的每棵树都将重复此操作。应添加这些值,并将值写入数据框中的新列中。那么这应该再次重复 到目前为止,我有我的数据 `Plot 1`<-read.csv CZR<-6 tree0<-`Plot 1`

我想在没有siplab的情况下使用Hegyi索引作为我的数据。到目前为止,这超出了我的可能性。 我在Windows7上使用R Studio。 公式是

因此,在目标树周围的某个半径内,称为CZR,将所有的树都放到那里,将它们的直径d除以目标树的直径。然后将结果除以两者之间的距离。比赛区内的每棵树都将重复此操作。应添加这些值,并将值写入数据框中的新列中。那么这应该再次重复

到目前为止,我有我的数据

`Plot 1`<-read.csv
CZR<-6
tree0<-`Plot 1`$ID[`Plot 1`$SpNr=="1"&`Plot 1`$X>5&`Plot 1`$X<25&`Plot 1`$Y>5&`Plot 1`$Y<25] # 5 m from margin

x0<-NULL
y0<-NULL
spec0<-NULL
d0<-NULL
pos11<-NULL
pos12<-NULL
posXY<-NULL

for(n in 1:length(tree0)){
  x0[n]<-`Plot 1`$X[`Plot 1`$ID==tree0[n]]
  y0[n]<-`Plot 1`$Y[`Plot 1`$ID==tree0[n]]
  spec0[n]<-`Plot 1`$Sp[`Plot 1`$ID==tree0[n]]
  d0[n]<-`Plot 1`$dbh[`Plot 1`$ID==tree0[n]]
  pos11[n]<-`Plot 1`$xy[`Plot 1`$ID==tree0[n]]
  pos12[n]<-`Plot 1`$xy[`Plot 1`$ID==tree0[n]]
  posXY[n]<-`Plot 1`$xy[`Plot 1`$ID==tree0[n]]
}

`Plot 1`对于我们大多数人来说,符号
read.csv
是一个函数。您似乎还使用该名称命名了数据对象。这不是一个很好的策略。您应该至少提供
dput(head(get('Plot 1'))
的输出。您应该意识到,大多数使用R的初学者认为“length”函数指的是行,而实际上它指的是数据帧的列。因此,很可能您的循环正在做完全不正确的事情(并抛出错误)。您可能想要
for(n in 1:nrow(tree0)){…
你完全正确。我之前已经纠正了这个错误,我只是在这里重复了这个错误。谢谢。read.csv只是一个简短的版本,因为我的路径很长。不确定最后一条关于“before”的评论是什么意思。我希望您不要认为我们应该返回并搜索您之前的所有问题。对于我们大多数人来说,符号
read.csv
是一个函数。您似乎也用该名称命名了一个数据对象。这不是一个很好的策略。您至少应该提供
dput(head(get('Plot 1'))的输出
。您应该意识到,大多数使用R的初学者认为“length”函数指的是行,而实际上它指的是数据帧的列。因此,您很可能在循环中做了完全不正确的事情(并抛出错误)。您可能想要
for(n in 1:nrow(tree0)){…
你是完全正确的。我之前纠正了这个错误,我只是在这里重复了这个错误。谢谢。read.csv只是一个简短的版本,因为我的路径很长。我不确定最后一条关于“before”的评论是什么意思。我希望你不要认为我们应该返回并搜索你之前的所有问题。
ref_tree<-cbind(tree0, spec0, d0, x0, y0); ref_tree # all the ref trees 
ref_tree<-as.data.frame(ref_tree)
cbind(ref_tree, posXY) #if I don't change to data.frame, everything becomes a complex number

plot(`Plot 1`$xy, main="Treecoordinates Plot 1", xlim=c(0,30),ylim = c(0,30),
     xlab="Osten in Metern", ylab= "Norden in Metern",
     cex=sqrt(`Plot 1`$dbh))