pam无法访问在函数内创建的变量

时间:2018-08-31 09:13:29

标签: r cluster-analysis

使用pam()包中的函数cluster编写函数时,发现了一个非常特殊的问题。下面的代码是原始函数的简化版本,用于演示该问题:

library(cluster)
Dat=array(data=runif(10*2*20, 0, 50), dim=c(10, 2, 20))
Groups=c(rep("A", 10), rep("B", 10))
#K=3

Test<-function (Dat, Groups, K=3) {
#Transform groups
Groups<-as.factor(Groups)

#Decompose data into Euclidean space
Eucl.Coord<-t(matrix(Dat, (dim(Dat)[1])*2, dim(Dat)[3]))

#Define colour-coding
ColSet<-rainbow(length(levels(Groups)))
Col<-ColSet[match(Groups, levels(Groups))]

#Perform partitional clustering
KMeans<-pam(dist(Eucl.Coord), k=K)
Class<-length(which(KMeans$clustering==as.numeric(Groups)))/length(Groups)
plot(KMeans, which.plot=1, shade=TRUE, col.p=Col, col.txt=Col,   col.clus="grey90", main=paste("Correct classification: ", round(Class*100, digits=2), "%", sep=""))
}

Test(Dat=Dat, Groups=Groups, K=3)

现在,问题出在以下地方:当我将Test()作为函数加载并尝试运行时,出现错误消息

  

as.matrix(x)中的错误:找不到对象'Eucl.Coord'中的错误   clusplot.partition(x,立场=立场,线条=线条,阴影=阴影,:   没有发现diss或数据,也没有pam(x =   dist(Eucl.Coord),k = K)

这似乎暗示pam()要使用不存在的对象(Eucl.Coord)。但是,这是件奇怪的事情:当您手动在函数中运行代码时,一切都很好。 Eucl.Coord已正确创建和使用pam()。如果您希望在手动运行之后再次使用该功能,因为pam()会使用在初始运行期间创建的全局变量空间中的Eucl.Coord。关闭R并尝试再次运行该函数,由于Eucl.Coord在全局空间中不再存在,因此不再起作用。

我知道Eucl.Coord的设置正确,因为在实际函数中,其他代码段也可以毫无问题地使用它。好像pam()并且只有pam()无法访问在函数中创建的对象。我以前从未见过这种行为。有人可以帮我吗?

0 个答案:

没有答案