R: функция, изменяющая поведение печати при возврате NULL

Этот вопрос только для любопытства. Мой коллега и я пытались написать функцию, которая возвращает NULL, но не печатает его.

Прежде чем мы нашли return(invisible(NULL)), Я старался return({dummy<-NULL}) который работает, но только один раз. После первой оценки функции снова начинают печатать:

test <- function() {
  return({x<-NULL})
}
# no printout
test()
# with printout
test()
# with printout
test()

Как это происходит?

1 ответ

Решение

Я думаю, что это связано с более старой обработкой возврата, встроенной в R. Есть много функций возврата, withVisible, invisibleи т. д. Когда вы возвращаете назначение x<-null внутри функции возврата он не будет автоматически печататься. Если вы хотите назначить печать...

test <- function() {
  withAutoprint(x<-NULL)
}
# with printout this time
test()
# with printout
test()
# with printout
test()

Я думаю, что это просто может быть жестко запрограммировано в функции возврата, может быть, что-то вытянуто из этой логики ниже, просто выстрел в темноте.

Source: R Documentation

x <- 1
withVisible(x <- 1) # *$visible is FALSE
x
withVisible(x)      # *$visible is TRUE

Опять же, если мы не используем выражение и просто возвращаем переменную или значение внутри нашей возвращаемой функции, мы получаем автоматическую печать. Причина, по которой я предполагаю, что он возвращается при втором вызове, связана с тем фактом, что x уже был назначен ранее.

РЕДАКТИРОВАТЬ: Я нашел это глубоко в документации по автоматической печати. "Печатается ли возвращенное значение выражения R верхнего уровня, управляется глобальной логической переменной R_Visible. Это значение устанавливается в значение" истина "или" ложь "при входе во все примитивные и внутренние функции на основе столбца eval таблицы в файле src/main/names.c: соответствующий параметр можно извлечь с помощью макроса PRIMPRINT. "( Источник)

Другие вопросы по тегам