Блок-схема с использованием {diagram} в R 3.0.0 для Windows
Я пытаюсь воссоздать блок-схему в R, используя пакет диаграмм (v 1.6). Я смог сделать диаграмму, используя этот точный скрипт (который я изменил из примера в документации по диаграмме), но как только я обновил R до 3.0.0, функция координат дает мне ошибку. Вот пример:
library(graphics)
library(diagram)
par(mar = c(1, 1, 1, 1))
openplotmat()
elpos<-coordinates(c(1,1,2,4))
Error in (function (classes, fdef, mtable) : unable to find an inherited method for function ‘coordinates’ for signature ‘"numeric"’
Я все еще новичок в R и коде и т. д., поэтому, когда я запускаю traceback (), я действительно не понимаю, что он мне говорит:
3: stop(gettextf("unable to find an inherited method for function %s for signature %s",
sQuote(fdef@generic), sQuote(cnames)), domain = NA)
2: (function (classes, fdef, mtable)
{
methods <- .findInheritedMethods(classes, fdef, mtable)
if (length(methods) == 1L)
return(methods[[1L]])
else if (length(methods) == 0L) {
cnames <- paste0(""", sapply(classes, as.character),
""", collapse = ", ")
stop(gettextf("unable to find an inherited method for function %s for signature %s",
sQuote(fdef@generic), sQuote(cnames)), domain = NA)
}
else stop("Internal error in finding inherited methods; didn't return a unique method",
domain = NA)
})(list("numeric"), function (obj, ...)
standardGeneric("coordinates"), <environment>)
1: coordinates(c(1, 1, 2, 4))
В основном я не знаю, почему не работает функция coordinates() после обновления. Любое понимание этого, а также, возможно, перевод обратного следа будет огромной помощью. Спасибо!
1 ответ:
Я не могу ответить ни на вопрос, ни на проблему. Первоначально я не мог воспроизвести вашу ошибку:
library(diagram) openplotmat() (elpos1 <- diagram::coordinates(c(1,1,2,4))) # [,1] [,2] # [1,] 0.500 0.875 # [2,] 0.500 0.625 # ...Нахождение Одноименных Функций
Однако поиск других экземпляров функцииcoordinatesпоказал следующее:help.search('coordinates', fields='name') # Help files with name matching 'coordinates' using fuzzy matching: # # diagram::coordinates coordinates of elements on a plot # sp::coordinates-methods retrieve (or set) spatial coordinates # sp::coordinates sets spatial coordinates to create spatial data, or retrieves spatial # coordinates # sp::coordnames retrieve or assign coordinate names for classes in spЭтот вывод выполняет поиск всех установленных (не обязательно загруженных) пакетов. Из этого следует, что
spтакже имеет один. Использование его версии в вашем случае использования приводит к ошибке.Порядок загрузки пакета (или, замаскированный Функции)
Порядок загрузки пакетов важен, так как функции из более поздних загруженных функций маскируют функции с тем же именем из ранее загруженных пакетов. В частности:
Это сообщение говорит вам, что простой вызов# ensure we have neither package loaded detach(package:diagram, unload=TRUE) # ignore errors if not loaded detach(package:sp, unload=TRUE) # ignore errors if not loaded library(diagram) library(sp) # Attaching package: 'sp' # # The following object is masked from 'package:diagram': # # coordinatescoordinates()будет использовать версию изsp, а не изdiagram. (Для каждого блока кода ниже я используюdetach(), как и выше, чтобы убедиться, что ни пакет, ни его пространство имен по-прежнему не существует.)Использование версии
spприводит к той же ошибке что вы получили, загрузив библиотеки в порядок:diagram,sp:library(diagram) library(sp) # Attaching package: 'sp' # # The following object is masked from 'package:diagram': # # coordinates (elpos <- coordinates(c(1,1,2,4))) # Error in (function (classes, fdef, mtable) : # unable to find an inherited method for function 'coordinates' for signature '"numeric"'
traceback()идентичен тому, что вы предоставили.Обратный порядок загрузки работает:
Обратите внимание, что предупреждение теперь говорит вам, чтоlibrary(sp) library(diagram) # Attaching package: 'diagram' # # The following object is masked from 'package:sp': # # coordinates (elpos <- coordinates(c(1,1,2,4))) # [,1] [,2] # [1,] 0.500 0.875 # [2,] 0.500 0.625 # ...sp::coordinates()теперь маскируется.Когда Сомневаешься, Будь Недвусмысленным
Если есть какие-либо сомнения относительно того, какая версия вызывается, мы всегда можем форсировать, какую мы намерены использовать:
(elpos <- diagram::coordinates(c(1,1,2,4))) # [,1] [,2] # [1,] 0.500 0.875 # [2,] 0.500 0.625 # ...Я чувствую себя немного не в своей тарелке, отправляя это как ответьте , поскольку я обращаюсь к вашей проблеме и не обязательно к заявленному вопросу. Пожалуйста, продолжайте запрашивать ответы, если вам все еще нужно выследить результаты
traceback(). В этом усилии, однако, я не смог найти.findInheritedMethods(), но это имеет смысл, когдаdiagram::coordinatesожидает вектор, задающий число элементов в каждой строке, или 2-столбчатую матрицу с позицией элемента, или 'NULL', в то время какsp::coordinatesожидает объект, производный от класса "Spatial" (что, безусловно, не является простым вектором).