在函数内部有没有办法print
或显示变量的值,而不是在调用函数后在函数外部打印值?
我几乎可以肯定存在并且认为代码被称为reveal
或类似的东西,但我不记得正确的术语。
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)
和return(y)
都打印在函数外部。谢谢你的任何建议。
修改
我在这里找到了类似的问题:
https://stat.ethz.ch/pipermail/r-help/2002-November/027348.html
Peter Dalgaard对该问题的回答是取消选中buffered output
标签下名为Misc
的选项。但是,这似乎并不适用于我的情况。也许这些问题是无关的。
答案 0 :(得分:12)
您可以在函数内部放置print()调用,如果执行到达该点,则即使稍后发生错误,也会在控制台上生成输出。
> 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"
使用browser()函数作为调试路径可能更优雅。您可以通过更改选项()来设置其操作:
> 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
答案 1 :(得分:12)
我喜欢使用message
函数进行打印以进行调试,因为它似乎从可能发出的任何深度深处到达控制台。例如:
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))
}
答案 2 :(得分:1)
当我问这个问题时,我可能一直在考虑show
函数,它允许您在return
语句中不包含该变量的情况下查看变量的值。虽然,show
命令打印函数外部的值。
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