Ordihull Problem

I have been collaborating on this code that creates an NMDS plot and I want to add a shaded polygon of the points. However, the ordihull code keeps returning the following error. Note that the dput and complete codes are below. Any help would be amazing. Thank you

Error in if (n < 4) return(colMeans(x[-n, , drop = FALSE])) :
argument is of length zero

plot(mdat[,1], mdat[,2], pch=16, col=mdat$col,
xlab="NMDS1", ylab="NMDS2", xlim=c(-0.2, 0.2),
ylim=c(-0.2, 0.2), main= "Phylum")

ordihull(mdat[,1], mdat[,2], display="sites", label=T,
lwd=2, draw="polygon",col= c("blue", "red", "green"))

#---------------------------------------------------------------------------------------------------------------
DPUT

structure(list(p__Proteobacteria = c(44.807, 40.907, 36.558,
36.811, 39.401, 40.114, 45.911, 43.133, 30.137, 27.734, 26.722,
31.261), p__Actinobacteria = c(26.819, 34.651, 40.904, 38.847,
39.446, 37.523, 29.881, 29.251, 31.783, 23.641, 34.918, 31.308
), p__Acidobacteria = c(8.48, 6.6, 5.934, 6.609, 5.89, 7.567,
5.795, 6.666, 10.616, 10.709, 8.988, 11.794), p__Bacteroidetes = c(7.56,
8.189, 5.363, 6.223, 4.716, 3.613, 4.65, 5.2, 4.281, 2.785, 2.808,
3.271), p__Gemmatimonadetes = c(3.529, 2.108, 1.213, 1.193, 1.541,
1.439, 1.006, 1.171, 5.794, 4.107, 4.001, 2.747), p__Chloroflexi = c(2.686,
2.987, 2.979, 3.049, 4.128, 4.564, 5.304, 4.624, 3.669, 2.775,
4.534, 4.94), p__Bacteria_unclassified = c(2.38, 1.869, 1.579,
1.247, 2.3, 2.108, 1.36, 1.193, 3.126, 1.885, 2.987, 2.37), p__Firmicutes = c(0.998,
0.807, 2.76, 2.962, 0.866, 1.32, 1.651, 2.073, 1.099, 1.046,
1.3, 1.302), p__Verrucomicrobia = c(0.676, 0.404, 0.32, 0.35,
0.293, 0.239, 0.188, 0.261, 0.521, 0.726, 0.52, 0.397), p__Nitrospirae = c(0.464,
0.244, 0.198, 0.208, 0.016, 0.032, 0.024, 0.042, 0.296, 0.103,
0.229, 0.211), p__Candidatus_Saccharibacteria = c(0.421, 0.511,
0.456, 0.552, 0.523, 0.6, 0.842, 1.016, 0.672, 0.636, 0.465,
0.736), p__Planctomycetes = c(0.392, 0.267, 0.354, 0.285, 0.275,
0.356, 0.285, 0.276, 0.33, 0.438, 0.552, 0.365), p__Fibrobacteres = c(0.14,
0.074, 0.007, 0.009, 0.072, 0.044, 0.136, 0.079, 0.117, 0.018,
0.167, 0.065), p__Candidatus_Latescibacteria = c(0.113, 0.059,
0.017, 0.005, 0.004, 0.017, 0.015, 0.009, 0, 0.011, 0.007, 0.018
), p__Latescibacteria = c(0.085, 0.04, 0.01, 0.004, 0.012, 0.015,
0.033, 0.015, 0.012, 0.016, 0.011, 0.018), p__Cyanobacteria = c(0.079,
0.048, 1.071, 1.372, 0.32, 0.19, 2.629, 4.689, 7.133, 22.963,
11.417, 8.767), p__Thermodesulfobacteria = c(0.068, 0.057, 0.115,
0.103, 0.008, 0.01, 0.015, 0.007, 0.01, 0.003, 0.002, 0.013),
p__Elusimicrobia = c(0.059, 0.021, 0.012, 0.001, 0.004, 0.002,
0.015, 0.017, 0, 0.002, 0.005, 0.006), p__Chlorobi = c(0.052,
0.025, 0.002, 0.012, 0.029, 0.046, 0.033, 0.04, 0.05, 0.02,
0.046, 0.025), p__Armatimonadetes = c(0.046, 0.053, 0.051,
0.072, 0.076, 0.095, 0.048, 0.053, 0.197, 0.159, 0.128, 0.125
), p__Spirochaetes = c(0.035, 0.021, 0.002, 0.001, 0, 0.002,
0.024, 0.039, 0, 0, 0, 0), p__Parcubacteria = c(0.03, 0.013,
0, 0, 0.01, 0.015, 0.042, 0.037, 0.032, 0.059, 0.053, 0.011
), p__Chlamydiae = c(0.028, 0.017, 0.046, 0.05, 0.014, 0.007,
0.021, 0.022, 0.07, 0.074, 0.08, 0.152), p__Tenericutes = c(0.013,
0.008, 0.002, 0.004, 0.006, 0.005, 0.018, 0.033, 0.006, 0.003,
0.025, 0.046), p__BRC1 = c(0.011, 0.008, 0.002, 0.003, 0.008,
0.015, 0.006, 0.013, 0.018, 0.026, 0.016, 0.006), p__Thermotogae = c(0.007,
0.002, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), p__candidate_division_WPS.1 = c(0.006,
0.004, 0.024, 0.011, 0.008, 0.005, 0.009, 0.006, 0.024, 0.033,
0.018, 0.023), p__Deinococcus.Thermus = c(0.004, 0, 0.002,
0.003, 0.002, 0.002, 0, 0.004, 0.002, 0.008, 0, 0.003), p__Ignavibacteriae = c(0.002,
0, 0.002, 0.003, 0.004, 0.012, 0.003, 0, 0, 0, 0.002, 0),
p__Candidatus_Gracilibacteria = c(0.002, 0, 0.005, 0.003,
0.002, 0, 0.003, 0, 0, 0, 0, 0.001), p__Candidatus_Microgenomates = c(0.002,
0, 0.005, 0, 0, 0, 0, 0, 0, 0.002, 0, 0), p__Candidatus_Melainabacteria = c(0.002,
0.002, 0, 0, 0, 0, 0, 0, 0, 0.002, 0, 0), p__Candidatus_Tectomicrobia = c(0,
0, 0, 0, 0.014, 0.029, 0.024, 0.017, 0, 0, 0, 0), p__unclassified = c(0,
0, 0.002, 0, 0.008, 0.002, 0, 0, 0, 0.005, 0, 0.01), p__candidate_division_WWE3 = c(0,
0.002, 0, 0.003, 0, 0.002, 0.012, 0.002, 0, 0, 0, 0.003),
p__Microgenomates = c(0, 0.002, 0, 0.001, 0, 0.005, 0.003,
0.002, 0.002, 0.003, 0, 0.001), p__Fusobacteria = c(0, 0,
0, 0, 0, 0, 0.003, 0.004, 0, 0, 0, 0.001), p__candidate_division_WPS.2 = c(0,
0, 0, 0, 0, 0, 0, 0, 0, 0.003, 0, 0.003), p__Hydrogenedentes = c(0,
0, 0, 0, 0, 0.002, 0, 0.002, 0, 0.002, 0, 0)), class = "data.frame", row.names = c("D15B",
"D610B", "D15F", "D610F", "HR15B", "HR610B", "HR15F", "HR610F",
"C15B", "C610B", "C15F", "C610F"))

#-----------------------------------------------------------------------------------------------------------------------------
CODES

phylum.dat <- dput
x <- data.frame(tax=names(phylum.dat), nsites=apply(phylum.dat, 2, function(x){length(which(x>0))}))
d1 <- vegdist(phylum.dat, method = "jaccard", binary = TRUE)
d2 <- vegdist(log1p(phylum.dat, method = "jaccard"))
logit_phylum <- as.matrix(phylum.dat+1)/100
d3 <- qlogis(logit_phylum)
d3 <- d3+abs(min(d3))
d3 <- vegdist(d3, method = "jaccard")
m1 <- metaMDS(d1)
m2 <- metaMDS(d2)
m3 <- metaMDS(d3)
e1 <- envfit(m3, phylum.dat)
exy <- data.frame(tax=names(phylum.dat), x=e1$vectors$arrows[,1], y=e1$vectors$arrows[,2], pval=e1$vectors$pvals, r=e1$vectors$r)
rownames(exy) <- NULL
exy <- exy[order(-exy$r),]
mdat <- data.frame(m3$points)
mdat$site <- substr(rownames(mdat), 1, 1)
mdat$col <- ifelse(mdat$site == "D", "red",
ifelse(mdat$site == "H", "blue", "green"))
mdat$rad <- sqrt((mdat$MDS1^2) + (mdat$MDS2^2))
max(mdat$rad)
exy$x2 <- 0.17 * exy$r * exy$x
exy$y2 <- 0.17 * exy$r * exy$y
exy$adj <- ifelse(exy$x < 0, 1, 0)
plot(mdat[,1], mdat[,2], pch=16, col=mdat$col, xlab="NMDS1", ylab="NMDS2", xlim=c(-0.2, 0.2), ylim=c(-0.2, 0.2), main= "Phylum")

#Assign colors
cols <- c("green3", "red", "blue")
mdat$col <- cols[match(mdat$site, sort(unique(mdat$site)))]

#Plot NMDS
plot(mdat[,1], mdat[,2], pch=21, col=mdat$col, bg="white", lwd=2, xlab="NMDS1", ylab="NMDS2", xlim=c(-0.2, 0.3), ylim=c(-0.2, 0.2), main= "Class")

#Add legend
legend("bottomright", legend=c("Decatur", "KSU Field Station", "Cedartown"), pch=16, col=c("red", "blue", "green3"))

#Add Ordihulls
ordihull(m3, mdat$site, col=cols, lwd=3)

#Add Ordiellipse (at 95% confidence interval)
ordiellipse(m3, mdat$site, col=cols, kind="se", conf=0.95, draw="polygon", border=cols)

#Edit points
points(mdat[,1], mdat[,2], pch=21, col=mdat$col, bg="white", lwd=2, cex=1.5)

#Add centroid labels
cent <- aggregate(MDS1~site, data=mdat, mean)
cent$y <- aggregate(MDS2~site, data=mdat, mean)$MDS2
cent$col <- mdat$col[match(cent$site, mdat$site)]

#Add centroid to overlay hulls
points(cent$MDS1, cent$y, pch=22, col=cent$col, bg="white", cex=3)

#Edit centroid text
text(cent$MDS1, cent$y, cent$site, cex=1.3, col=cent$black, font=2, adj=c(0.5, 0.45))

This topic was automatically closed 7 days after the last reply. New replies are no longer allowed.

If you have a query related to it or one of the replies, start a new topic and refer back with a link.