imprimir ou mostrar a variável dentro da função

existe uma maneira de print ou mostrar o valor de uma variável enquanto está dentro de uma função, em oposição a imprimir o valor fora da função depois de a função ter sido chamada?

Tenho quase a certeza de que existe e pensei que o código fosse chamado revealou algo parecido, mas não me lembro do termo correcto.

my.function <- function(x) {

  y <- x^2
 #  reveal(y)
 #  display(y)

 # desired result is to print or display here:
 # [1] 16

  cat(y)
  print(y)
  return(y)  
}

x <- 4

my.function(x)
#16[1] 16
#[1] 16

cat(y), print(y) e {[5] } todos imprimem fora da função. Obrigado por qualquer conselho.

EDITAR

Encontrei uma pergunta semelhante. toma.

Https://stat.ethz.ch/pipermail/r-help/2002-November/027348.html

A resposta a essa pergunta de Peter Dalgaard foi desligar uma opção chamada buffered output sob a Página Misc. No entanto, isso não parece estar a funcionar no meu caso. Talvez as perguntas não estejam relacionadas.

 7
Author: Mark Miller, 2014-03-30

3 answers

Você pode colocar as chamadas print() dentro da função e se a execução atingir esse ponto, então uma saída será produzida na consola, mesmo que ocorra um erro mais tarde.

 > myf <- function(x){ print(x); y <- x^2; print(y); error() }
> myf(4)
[1] 4
[1] 16
Error in myf(4) : could not find function "error"

É provavelmente mais elegante usar a função browser() como a rota de depuração. Configura a sua operação alterando as opções ():

> options(error=recover)
> myf(4)
[1] 4
[1] 16
Error in myf(4) : could not find function "error"

Enter a frame number, or 0 to exit   

1: myf(4)

Selection: 1
Called from: top level 
Browse[1]> x
[1] 4
Browse[1]> y
[1] 16
Browse[1]>    # hit a <return> to exit the browser 

Enter a frame number, or 0 to exit   

1: myf(4)

Selection: 0   # returns you to the console
 11
Author: 42-, 2014-03-30 04:45:16

Gosto de usar a função message para imprimir para depuração, uma vez que parece chegar à consola a partir de qualquer profundidade escura que possa estar a emitir. Por exemplo:

somefunc <- function(x) {
       message(paste('ok made it this far with x=',x))
       # some stuff to debug
       message(paste('ok made it this far with x^2=',x^2))
       # some more stuff to debug
       message(paste('ok made it to the end of the function with x^3=',x^3))
}
 10
Author: Gary Weissman, 2014-03-30 06:31:23

Quando fiz esta pergunta, talvez estivesse a pensar na função show que lhe permite ver os valores de uma variável sem incluir essa variável na Declaração return. Embora, o comando show imprime valores fora da função.

my.function <- function(x) {
     y <- x^2
     show(y)
     show(length(y))
     z <- y + x
     return(z)
}

x <- 1:10

my.function(x)

 # [1]   1   4   9  16  25  36  49  64  81 100
 # [1] 10
 # [1]   2   6  12  20  30  42  56  72  90 110
 1
Author: Mark Miller, 2015-04-26 17:11:01