2015-05-29 49 views
1

我有一个网站矩阵。我想开发一个UPGMA集群。我想使用R和素食图书馆。我的矩阵有不是所有变量都被测量的位置。R中带有NoData值的UPGMA集群

随着数据的相似矩阵:

Variable 1;Variable 2;Variable 3;Variable 4;Variable 5 
0.5849774671338231;0.7962161133598957;0.3478909861199184;0.8027122599553912;0.5596553797833573 
0.5904142034898171;0.18185393432022612;0.5503250366728479;NA;0.05657408486342197 
0.2265148074206368;0.6345513807275411;0.8048128547418062;0.3303602674038131;0.8924461773052935 
0.020429460126217602;0.18850489885886157;0.26412619465769416;0.8020472793070729;NA 
0.006945970735023677;0.8404983401121199;0.058385134042814646;0.5750066564897788;0.737599672122899 
0.9909722313946067;0.22356808747617019;0.7290078902086897;0.5621006367587756;0.3387823531518016 
0.5932907022602052;0.899773235815933;0.5441346748937264;0.8045695319247985;0.6183003409599681 
0.6520679140573288;0.5419713133237936;NA;0.7890033752744002;0.8561828607592286 
0.31285906479192593;0.3396351688936058;0.5733594373520889;0.03867689654415574;0.1975784885854912 
0.5045966366726562;0.6553489439611587;0.029929403932252963;0.42777351534900676;0.8787135401098227 

我刨用下面的代码来做到这一点:

library(vegan) 
# env <- read.csv("matrix_of_sites.csv") 
env.norm <- decostand(env, method = "normalize") # Normalizing data here 
env.ch <- vegdist(env.nom, method = "euclidean") 
env.ch.UPGMA <- hclust(env.ch, method="average") 
plot(env.ch.UPGMA) 

我跑第二线后,我得到这个错误:

Error in x^2 : non-numeric argument to binary operator 

我不熟悉R,所以我不确定这是否是由于没有数据的单元。我该如何解决这个问题?

+0

@gung:谢谢你的建议。我包括数据以支持一个可重复的例子。 – Jaqo

+0

我为你格式化了数据。如果你愿意,你可以检查它是如何完成的,以备将来参考。我注意到有2个地方只有4个值,并且有分号';;'。我认为那些是缺少价值的;我把'NA's放在那里。编辑,如果适当的话。 – gung

+0

谢谢。现在很清楚。 – Jaqo

回答

1

R并不认为数据是矩阵中的数字,但至少其中一些数据被解释为字符变量并更改为因子。在将int读入R后检查数据。如果所有数据都是数字,则sum(env)会给出数字结果。使用str()summary()功能进行详细检查。

从R的角度来看,您的数据文件具有混合格式。 R功能read.csv假定项目由逗号分隔(,),小数点分隔符是句点(.),并且read.csv2假定项目由冒号分隔(;),小数点分隔符是逗号,。你混合这两个约定。您可以读取格式如此的数据,但您可能必须同时提供sepdec参数。

如果您在R中正确获取您的数据,则decostand将停止并出现错误:如果您未添加na.rm = TRUE,它不会接受缺失值。与下一个vegdist命令相同:它还需要na.rm = TRUE来分析您的数据。

+0

感谢您的帮助,并为纯素食!在调用decostand时,设置header = TRUE,dec ='。',sep =',',stringsAsFactors = FALSE,na.strings ='NA''。 – Jaqo

+0

我有第二个问题:我在Q模式下应用聚类和PCA分析:我正在比较网站(或L&L会说的对象),而不是变量。我的变量是不同的(例如,降水,坡度,不透水性)。在获得站点之间的和弦距离之前,我是否应该在变量内应用规范化? – Jaqo