cluster::pam的开始是如何工作的?

cluster::pam的开始是如何工作的?,r,cluster-analysis,packages,R,Cluster Analysis,Packages,我正在研究cluster包的函数pam,其中的一些东西似乎是akward:该函数缺少对象。让我解释一下我的意思 这是由终端中的cluster::pam获取的功能代码示例 function (x, k, diss = inherits(x, "dist"), metric = "euclidean", medoids = NULL, stand = FALSE, cluster.only = FALSE, do.swap = TRUE, keep.dis

我正在研究cluster包的函数pam,其中的一些东西似乎是akward:该函数缺少对象。让我解释一下我的意思

这是由终端中的
cluster::pam
获取的功能代码示例

function (x, k, diss = inherits(x, "dist"), metric = "euclidean", 
          medoids = NULL, stand = FALSE, cluster.only = FALSE, do.swap = TRUE, 
          keep.diss = !diss && !cluster.only && n < 100, keep.data = !diss && 
            !cluster.only, pamonce = FALSE, trace.lev = 0) 
{
  stopifnot(length(cluster.only) == 1, length(trace.lev) == 
              1)
  nMax <- 65536
  if ((diss <- as.logical(diss))) {
    if (anyNA(x)) 
      stop("NA values in the dissimilarity matrix not allowed.")
    if (data.class(x) != "dissimilarity") {
      if (!is.null(dim(x))) {
        x <- as.dist(x)
      }
      else {
        if (!is.numeric(x) || is.na(n <- sizeDiss(x))) 
          stop("'x' is not and cannot be converted to class \"dissimilarity\"")
        attr(x, "Size") <- n
      }
      class(x) <- dissiCl
      if (is.null(attr(x, "Metric"))) 
        attr(x, "Metric") <- "unspecified"
    }
    if (keep.data) 
      stop("Cannot keep data when 'x' is a dissimilarity!")
    n <- attr(x, "Size")
    if (n > nMax) 
      stop(gettextf("have %d observations, but not more than %d are allowed", 
                    n, nMax))
    dv <- x[lower.to.upper.tri.inds(n)]
    dv <- c(0, dv)
    storage.mode(dv) <- "double"
    jp <- 1
    mdata <- FALSE
    ndyst <- 0
另外,有人能解释一下,我怎么可能有这个条件,在函数代码中,它是真的:
data.class(x)!=“差异性”


当以(例如)
dist(myBase)
的形式输入
x
时,此对象的类为
diss
。但是,如何创建类不同的对象呢?

discicl
是加载
集群时附加的命名空间中的非导出对象。
cluster::pam
函数正在访问它。如果需要,请在
discicl
的函数中使用
cluster:::discicl

这个函数中的其他对象也会遇到这个问题。如果您试图在不运行
库(集群)
的情况下运行它。您只需对所有对象执行查找/替换操作,在导出的每个对象之前添加
cluster::
,并为未导出的每个对象添加
cluster::


您可以使用相同的策略将对象转换为类
“相异性”
。如果它已经属于类
diss
,或者属于类
“dist”
,我建议使用
pam
强制的方式。只需设置
class(myBase)是否有任何方法将对象加载为
dispicl
,这样就不必添加前缀
cluster::
?使用
library(cluster)
似乎只会影响函数对名称空间操作符的需求,而不会影响变量。这是包开发人员的设计决策<代码>库(集群)
精确加载设计器决定导出的函数和变量。他/她决定不导出
dispicl
,因此您只能通过
操作符获取它。
库中没有任何选项或其他方法可以一次加载所有未导出的对象,因此只能使用
myPam(dist(mtcars), 12)
cluster::pam(dist(mtcars), 12)