S3 对象如何调用方法?
How does an S3 object invoke a method?
我一直在努力发展我的 S3 学习。我在这里正确使用 object
了吗?我想创建一个 summary
和 print
和 plot
类。我目前正在使用 t 检验,但函数本身并不重要 - 正确获取 S3 代码才是。
注意:我已经阅读了我能找到和推荐的所有内容 - 但由于他们继续使用 sloop 或 lm 我只是不了解这些包中的独特之处或内容 - 我想从头开始构建。谢谢
library(gapminder)
library(dplyr)
library(ggplot2)
head(gapminder)
str(gapminder)
part3 <- gapminder
Asia1 <- subset(part3, continent == "Asia")
Africa1 <- subset(part3, continent =="Africa")
part3c <- rbind(Asia1, Africa1)
summary.part3s3b <-function(part3g) {
cat('The following should give t-test results:\n')
part3g <- t.test(data = part3c,
lifeExp ~ continent)
part3g
}
summary(part3g)
我们定义了一个构造函数来创建 part3s3b 对象以及一个摘要和绘图方法。 summary 方法创建一个 class summary.part3s3b 的对象,它有一个 print 方法。然后我们测试一下。看 lm, print.lm, plot.lm, summary.lm, print.summary.lm 再举个例子.
# construct a part3s3b object
part3s3b <- function(x, ...) {
structure(x, class = c("part3s3b", setdiff(class(x), "part3s3b")))
}
# construct summary.part3s3b object which is an htest with
# a c("summary.part3s3b", "htest") class
summary.part3s3b <- function(object, ...) {
y <- t.test(data = object, lifeExp ~ continent)
structure(y, class = c("summary.part3s3b", "htest"))
}
# same as print.htest except it also displays a line at the beginning
print.summary.part3s3b <-function(x, ...) {
cat('The following should give t-test results:\n')
NextMethod()
}
plot.part3s3b <- function(x, ...) {
cat("plotting...\n")
NextMethod()
}
# test
X <- part3s3b(part3c) # create part3s3b object X
summary(X) # run summary.part3s3b and print.summary.part3s3b
plot(X) # run plot.part3s3b
我一直在努力发展我的 S3 学习。我在这里正确使用 object
了吗?我想创建一个 summary
和 print
和 plot
类。我目前正在使用 t 检验,但函数本身并不重要 - 正确获取 S3 代码才是。
注意:我已经阅读了我能找到和推荐的所有内容 - 但由于他们继续使用 sloop 或 lm 我只是不了解这些包中的独特之处或内容 - 我想从头开始构建。谢谢
library(gapminder)
library(dplyr)
library(ggplot2)
head(gapminder)
str(gapminder)
part3 <- gapminder
Asia1 <- subset(part3, continent == "Asia")
Africa1 <- subset(part3, continent =="Africa")
part3c <- rbind(Asia1, Africa1)
summary.part3s3b <-function(part3g) {
cat('The following should give t-test results:\n')
part3g <- t.test(data = part3c,
lifeExp ~ continent)
part3g
}
summary(part3g)
我们定义了一个构造函数来创建 part3s3b 对象以及一个摘要和绘图方法。 summary 方法创建一个 class summary.part3s3b 的对象,它有一个 print 方法。然后我们测试一下。看 lm, print.lm, plot.lm, summary.lm, print.summary.lm 再举个例子.
# construct a part3s3b object
part3s3b <- function(x, ...) {
structure(x, class = c("part3s3b", setdiff(class(x), "part3s3b")))
}
# construct summary.part3s3b object which is an htest with
# a c("summary.part3s3b", "htest") class
summary.part3s3b <- function(object, ...) {
y <- t.test(data = object, lifeExp ~ continent)
structure(y, class = c("summary.part3s3b", "htest"))
}
# same as print.htest except it also displays a line at the beginning
print.summary.part3s3b <-function(x, ...) {
cat('The following should give t-test results:\n')
NextMethod()
}
plot.part3s3b <- function(x, ...) {
cat("plotting...\n")
NextMethod()
}
# test
X <- part3s3b(part3c) # create part3s3b object X
summary(X) # run summary.part3s3b and print.summary.part3s3b
plot(X) # run plot.part3s3b