#r #oop
#r #ооп
Вопрос:
Я создал универсальную функцию и определил класс вывода внутри функции. Я также создал функцию печати, которая принимает выходные данные первой функции.
Однако после того, как я запускаю print, исходная функция выдает результат print, а не тот результат, который я хочу, чтобы он выдавал.
Это мои методы:
fisher <- function(obj, ...){
UseMethod("fisher")
}
fisher.default <- function(obj, ...){
x<- -2*sum(log(obj))
df <- 2*length(obj)
p = pchisq(x, df,lower.tail = FALSE)
class(p)="fisher"
p
}
print.fisher <- function(print_obj){
paste("The p-value of this vector is: ", print_obj)
}
xx= fisher(x)
fisher
перед созданием и выполнением print.fisher
функции все работало отлично. Теперь fisher(x)
выдает точный вывод как print(xx)
.
Что может быть не так?
Комментарии:
1. у вас нет функции
fisher
, определенной в вопросе2.
fisher<-function(obj, ...) UseMethod("fisher")
, как говорит @rawr.3. Извините, я сначала не включил универсальную функцию в свой вопрос. Конечно, это было в моем коде. Только что отредактировал свой пост.
4. Переписать как
print(paste("The p-value of this vector is: ", print_obj))
.5.
print(paste("The p-value of this vector is: ", print_obj))
тоже не сработало.
Ответ №1:
Со мной работает следующее. R 4.0.3 в Ubuntu 20.10.
fisher <- function(x, ...){
UseMethod("fisher")
}
fisher.default <- function(x, ...){
y <- -2*sum(log(x))
df <- 2*length(x)
p <- pchisq(y, df, lower.tail = FALSE)
class(p) <- c("fisher", class(p))
p
}
print.fisher <- function(x, ...){
y <- paste("The p-value of this vector is:", unclass(x))
print(y)
invisible(y)
}
set.seed(2020)
x <- abs(rnorm(10))
xx <- fisher(x)
xx
#[1] "The p-value of this vector is: 0.985718045451049"
Запуск функции без назначения выходных данных также вызывает пользовательский метод печати.
fisher(x)
#[1] "The p-value of this vector is: 0.985718045451049"
Комментарии:
1. Я попробовал ваш метод, и хотя ‘print (xx)` отображал результат,
fisher(x)
после его запуска ничего не отображалось. Разве она не должна отображать значение и класс? (извините за мои обычные вопросы, я все еще новичок в R).