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?
reveal
ou 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 chamadabuffered 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.
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
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))
}
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