Следующий метод не работает после обновления с версии R 3.6.1 до 4.1.1

#r

Вопрос:

Несколько лет назад я написал пакет R в дополнение к статье, которую я писал, под названием PhiCor. Это работало нормально, но недавно кто-то связался со мной, так как они не могли заставить его работать с их версией R 4.1.1.

Это самая последняя фиксация, которая не работает (поэтому код, который не работает, может быть доступен позже:

Ошибка в методе NextMethod(«CorIndex») : нет метода для вызова

Я обновил R и могу повторить ошибку. Но я не знаю, почему это не работает. Вот где проявляется ошибка:

 CorIndex <- function(InDataframe, speciesbinary,weighted, group, SquareID = NULL){
 speciesbinary = InDataframe[,speciesbinary]
 weighted = InDataframe[,weighted]
 group = InDataframe[,group]
 NextMethod("CorIndex")
}
 

Затем у меня есть множество других функций:

 CorIndex.default <- function(InDataframe, speciesbinary,weighted, group, SquareID = NULL){

CorIndex.TargetVar <- function(CorIndexVarInput, targetgroup){

CorIndex.groupEqual <- function(CorIndexTargetVarInput){
 

В частности, тот, который запускался и вызвал ошибку, был:

 CorIndex.all.plusP <- function(InDataframe, speciesbinary, weighted, group, numberIteration = 1000, SquareID = NULL, toroidal = FALSE){
 

Который запускался с примерами данных, которые я включил в пакет:

 Species1_AllPhiPvalues = CorIndex.all.plusP(InDataframe = Species1, speciesbinary = "Species1", weighted = 'Proportion', group = 'HabId', SquareID = 'LocationID')
 

Комментарии:

1. Из чего состоит вектор класса InDataframe ?

2. InDataframe-это фрейм данных. speciesbinary-числовой, взвешенный-числовой, группа-целое число. Это то, о чем ты спрашивал?

3. Нет, я пытаюсь лучше понять ваш метод отправки. Что class(Species1) возвращается?

4. Я могу воспроизвести ошибку с помощью игрушечного примера, если я использую входные данные, которые не являются объектом (без атрибута класса). Кроме того, в документации говорится: «Метод NextMethod не должен вызываться, кроме как в методах, вызываемых методом UseMethod или из внутренних универсальных (см. InternalGenerics)». Вы получаете ошибку, когда используете универсальный метод вместо метода «all.plusP»?

5. > класс(Species1) [1] «данные.фрейм»

Ответ №1:

На данный момент я просто сделал это:

 CorIndex <- function(InDataframe, speciesbinary,weighted, group, SquareID = NULL){
  speciesbinary = InDataframe[,speciesbinary]
  weighted = InDataframe[,weighted]
  group = InDataframe[,group]
  #NextMethod("CorIndex")
  CorIndex.default(InDataframe,speciesbinary,weighted, group, SquareID)
 

Немного подтекста, обнажающего мое неполное понимание S3. Кажется, работает, но немного неряшливо, и я не уверен, что проблема не возникнет где-нибудь еще.