R: функция, изменяющая поведение печати при возврате NULL - PullRequest
0 голосов
/ 08 ноября 2018

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

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

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

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

1 Ответ

0 голосов
/ 08 ноября 2018

Я думаю, это связано с тем, что в 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. Это значение устанавливается в значение true или false при входе во все примитивные и внутренние функции на основе столбца eval таблица в файле src / main / names.c: соответствующий параметр можно извлечь с помощью макроса PRIMPRINT. " ( Источник )

...