Среда печати с использованием R - PullRequest
0 голосов
/ 04 января 2019

Я хотел бы написать функцию, выходные данные которой будут объектом класса myclass с вектором, списком, целым числом и так далее. Аналогично функции lm. Я пытался использовать environment, но когда я печатал значение функции, результат был

#Term 1
> fit1
<environment: 0x00000000220d1998>
attr(,"class")
[1] "myclass"

Однако, когда я печатаю функцию lm, результат будет

> fit2
Call:
lm(formula = variable1 ~ variable2)

Coefficients:
     (Intercept)         variable2  
         49.0802            0.3603 

Я знаю, чтобы получить доступ к отдельным значениям environment, используя $. Но мне бы хотелось, чтобы объект печатался как функция lm, как показано.

1 Ответ

0 голосов
/ 04 января 2019

Это то, что вы хотите?

variable1 <- rnorm(10)
variable2 <- rnorm(10)
fit1 <- lm(variable1~variable2)
fit2 <- fit1
class(fit2) <- "myclass"

# have a look at stats:::print.lm
# and copy that function, hence define it as print method for your class or edit further:
print.myclass <- function (x, digits = max(3L, getOption("digits") - 3L), ...) {
  cat("\nCall:\n", paste(deparse(x$call), sep = "\n", collapse = "\n"), 
      "\n\n", sep = "")
  if (length(coef(x))) {
    cat("Coefficients:\n")
    print.default(format(coef(x), digits = digits), print.gap = 2L, 
                  quote = FALSE)
  }
  else cat("No coefficients\n")
  cat("\n")
  invisible(x)
}

# now print
print(fit2)

# or
fit2
...