gpt4 book ai didi

r - 如何控制 R 中函数的输出(类似于 lm)

转载 作者:行者123 更新时间:2023-12-04 17:32:50 25 4
gpt4 key购买 nike

我正在 R 中创建一个自定义函数,它将几个不同的变量作为输入,并创建一个 data.frame、一个绘图和一些汇总统计信息,所有这些都存储在一个列表中。我只想在调用函数时打印汇总统计信息,但在显式调用时可以使用 plot 和 data.frame。

我想我想要的类似于lm()运行,但我不确定它是如何实现的。

当我打印 lm 返回的对象时我只得到了 $call 的打印输出和 $coefficients :

lm(mtcars$mpg ~ mtcars$cyl)

Call:
lm(formula = mtcars$mpg ~ mtcars$cyl)

Coefficients:
(Intercept) mtcars$cyl
37.885 -2.876

但很明显,在对 lm 的函数调用中还有更多可用的功能。 .
lm(mtcars$mpg[1:3] ~ mtcars$cyl[1:3])$residuals
1 2 3
-1.280530e-15 1.280530e-15 8.365277e-31

> unclass(lm(mtcars$mpg[1:3] ~ mtcars$cyl[1:3])

Call:
lm(formula = mtcars$mpg[1:3] ~ mtcars$cyl[1:3])

Coefficients:
(Intercept) mtcars$cyl[1:3]
26.4 -0.9


> unclass(lm(mtcars$mpg[1:3] ~ mtcars$cyl[1:3]))
$coefficients
(Intercept) mtcars$cyl[1:3]
26.4 -0.9

$residuals
1 2 3
-1.280530e-15 1.280530e-15 8.365277e-31

$effects
(Intercept) mtcars$cyl[1:3]
-3.741230e+01 1.469694e+00 1.810943e-15

....

$call
lm(formula = mtcars$mpg[1:3] ~ mtcars$cyl[1:3])

$model
mtcars$mpg[1:3] mtcars$cyl[1:3]
1 21.0 6
2 21.0 6
3 22.8 4

我查看了 lm 的代码,但我不太清楚发生了什么。

最佳答案

调用 lm 的结果是一个类属性设置为 lm 的对象。这个类的对象有自己的打印方法(如果你想使用 print.lm,你可以显式调用它)。您可以简单地通过设置函数返回的对象的类属性,然后编写自己的打印方法来自己做类似的事情。下面是一个例子:

my.func <- function(x, y, z){
library(ggplot2)
df <- data.frame(x, y, z)
p <- ggplot(df, aes(x, y)) + geom_point()
ds <- sapply(df, summary)

op <- list(data = df, plot = p, summary = ds)
class(op) <- 'my_list'
op
}

print.my_list <- function(m){
print(m$summary)
}

a <- my.func(1:5, 5:1, rnorm(5))
a
print.default(a)

因为列表 a将 class 属性设置为 my_list , 一旦你为它创建了一个打印方法,当你用那个类打印一个列表时就会使用这个方法。您可以通过显式调用 print.default 来查看整个对象。 .这里对 R 中的类有很好的解释: http://adv-r.had.co.nz/OO-essentials.html .

关于r - 如何控制 R 中函数的输出(类似于 lm),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37443196/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com