【发布时间】:2018-04-20 15:39:01
【问题描述】:
我提供了一个函数来绘制如下所示的 PCA 图。我想传递主要组件的名称(变量 a 和 b),但还没有想办法做到这一点。我尝试过使用 aes_string。收到的错误是 eval(expr, envir, enclos) 中的错误:找不到对象 '.names'
根据下面的建议,我举了一个具体的例子。一个功能起作用的地方,另一个不起作用的地方。目标是将变量传递给这个函数。
#data
d = iris[1:4]
#########################################################################
# PCA_Plot functions
#########################################################################
PCA_Plot = function(pcaData)
{
library(ggplot2)
theta = seq(0,2*pi,length.out = 100)
circle = data.frame(x = cos(theta), y = sin(theta))
p = ggplot(circle,aes(x,y)) + geom_path()
loadings = data.frame(pcaData$rotation, .names = row.names(pcaData$rotation))
p + geom_text(data=loadings, mapping=aes(x = PC1, y = PC2, label = .names, colour = .names, fontface="bold")) +
coord_fixed(ratio=1) + labs(x = "PC1", y = "PC2")
}
# non-working function with two extra variables
PCA_Plot2 = function(pcaData, var1, var2)
{
library(ggplot2)
theta = seq(0,2*pi,length.out = 100)
circle = data.frame(x = cos(theta), y = sin(theta))
p = ggplot(circle,aes(x,y)) + geom_path()
loadings = data.frame(pcaData$rotation, .names = row.names(pcaData$rotation))
p + geom_text(data=loadings, mapping=aes(x = var1, y = var2, label = .names, colour = .names, fontface="bold")) +
coord_fixed(ratio=1) + labs(x = var1, y = var2)
}
#pca
library(stats)
p = prcomp(d)
PCA_Plot(p) #works
PCA_Plot2(p, "PC1", "PC2") # ERROR Error: Discrete value supplied to
continuous scale
【问题讨论】:
-
你应该提供一个可重现的例子。
-
为了进一步@MLavoie 对可重现示例的评论,如果您可以使用
dput(data)或dput(head(data,50))为我们提供易于加载到data的R 示例,它将有很长的路要走帮助我们帮助您。