knitr::opts_chunk$set(echo = TRUE)
# setwd("C:/R/BB201608/pca")
# install.packages("factoextra","rgl")
library("factoextra")
library("rgl")
Dong.pca <- function(filename) {
# read data
df <- read.table(filename, header = T, sep = ",", quote = "")
# rm variables of max == min
df2 <- df[, !apply(df, MARGIN = 2, function(x) max(x, na.rm = TRUE) == min(x,
na.rm = TRUE))]
# pca
df.pca <- prcomp(df2[, -c(1:2)], scale = TRUE)
# plot 2d
pdf.filename <- paste(filename, ".pdf")
pdf(pdf.filename)
# par(mfrow=c(1,2))
print(fviz_screeplot(df.pca, ncp = 10))
plot(df.pca$x[, 1:2], pch = 20, col = df$Types)
abline(h = 0, v = 0, lty = 2)
text(df.pca$x[, 1], df.pca$x[, 2], labels = df$Species, cex = 0.7, pos = 3)
# plot 3d
df$Types <- as.integer(df$Types)
plot3d(df.pca$x[, 1:3], col = df$Types, type = "s", size = 0.8)
save.filename <- paste(filename, ".png")
rgl.snapshot(save.filename)
dev.off()
}
myfile<-c("18.csv","21.csv")
for (i in 1:length(myfile)) {
Dong.pca(myfile[i])
}