传递给.Fortran()时无法找到C_kmns对象

Rom*_*rik 5 r cluster-analysis k-means

我正在尝试修改stats::kmeans函数以返回迭代次数(请参阅此处).当我将源复制到我自己的文件,修改该函数并运行它时,我C_kmns在尝试执行该do_one函数时收到有关对象丢失的错误.此对象将传递给.Fortran调用,并且不会在kmeans函数中的任何位置创建.这个对象来自哪里?

我得到的错误是

Error in do_one(nmeth) : object 'C_kmns' not found
Run Code Online (Sandbox Code Playgroud)

这是"冒犯"电话的代码片段.

   do_one <- function(nmeth) {
      Z <-
               switch(nmeth,
                        { # 1
                           Z <- .Fortran(C_kmns, as.double(x), as.integer(m),
                                    as.integer(ncol(x)),
                                    ...
Run Code Online (Sandbox Code Playgroud)

Ian*_*ows 8

C_kmns是stats命名空间中的非导出对象.您可以通过使用stats ::: C_kmns告诉R在哪里找到它来解决问题.在你的例子中:

Z <- .Fortran(stats:::C_kmns, as.double(x), as.integer(m),
                                    as.integer(ncol(x)),
                                    ...
Run Code Online (Sandbox Code Playgroud)

一般来说,当你找到一个没有找到对象的错误时,你可以去寻找它 getAnywhere("C_kmns")