Или взгляните на функцию отладки trace()
. Вероятно, это не совсем то, что вы ищете, но оно позволяет вам поиграть с изменениями и имеет приятную особенность, благодаря которой вы всегда можете вернуться к своей исходной функции с помощью untrace()
.
trace()
является частью пакета base
и поставляется с хорошей и подробной страницей помощи.
Начните с вызова as.list (body(foo))
, чтобы увидеть все строки вашего кода.
as.list(body(foo))
[[1]]
`{`
[[2]]
line1 <- x
[[3]]
line2 <- 0
[[4]]
line3 <- line1 + line2
[[5]]
return(line3)
Затем вы просто определяете, что добавить в свою функцию и где ее разместить, определяя аргументы в trace()
.
trace (foo, quote(line2 <- 2), at=4)
foo (2)
[1] 4
В начале я сказал, что trace()
может быть не совсем тем, что вы ищете, поскольку вы не изменили свою третью строку кода, а просто переназначили значение объекту line2
в следующем вставленном строка кода. Это станет понятнее, если вы распечатаете код отслеживаемой функции
body (foo)
{
line1 <- x
line2 <- 0
{
.doTrace(line2 <- 2, "step 4")
line3 <- line1 + line2
}
return(line3)
}