Итак, я пытался создать функцию построения графика S3 generi c в R ... Я прочитал несколько блогов и примеров, объясняющих функции S3 ... но мне все еще трудно понять это. В моем пакете есть функция, которая создает матрицу. Затем у меня также есть другая функция, которая принимает созданную матрицу в качестве аргумента и затем отображает эту матрицу как тепловую карту. Я пытаюсь превратить эту вторую функцию (т.е. построение тепловой карты) в функцию S3 generi c. Приведенный ниже пример, надеюсь, объяснит, что я имею в виду.
Для начала у меня есть функция для создания матрицы:
#' myMatrix
#'
#' @description Creates Matrix
#'
#' @param rows No of rows
#' @param cols No of cols
#'
#' @importFrom stats "runif"
#'
#' @export
myMatrix <- function(rows = 10, cols = 10){
n <- rows # no or rows
p <- cols # no of cols
# Create matrix of values
myMat <- matrix(runif(n*p, 0, 1), nrow=n) # Create matrix
colnames(myMat) <- paste0("x", 1:p) # Name columns
rownames(myMat) <- paste0("x", 1:p) # Name rows
return(myMat)
}
Затем я бы сохранил результат матрицы следующим образом:
mat <- myMatrix(10,10)
Затем в отдельном скрипте я пытался создать функцию построения графиков S3 generi c, например:
#' heatMapTEST
#'
#' @description Plots plot
#'
#' @param myMat Given Matrix
#'
#' @importFrom ggplot2 "ggplot"
#'
#' @export
heatMapTEST <- function(myMat){
UseMethod('plot')}
#' @export
plot.heatMapTEST <- function(myMat){
df <- reshape2::melt(myMat, c("x", "y"), value.name = "z")
head(df)
ggplot(data=df,aes(x=x,y=y,fill=z))+
geom_tile()
}
А потом (я думаю) я бы назвал это примерно так:
plot(heatMapTEST(mat))
Но это возвращает ошибку:
Ошибка в h (simpleError (msg, call)): ошибка при оценке аргумента 'x' в выбор метода для функции "plot": нет применимого метода для "plot", примененного к объекту класса "c ('matrix', 'array', 'double', 'numeri c')"
Я новичок в написании методов S3, поэтому на самом деле я понятия не имею, прав ли я хотя бы частично в том, как я это делаю ... какие-либо предложения относительно того, как я мог бы создать общий S3, чтобы я мог использовать функцию heatMapTEST
с общей функцией c plot
?