Я не думаю, что вы можете обмануть stop
, манипулируя контекстом оценки таким образом. Если вам действительно нужно идентифицировать эту функцию, вы можете попробовать захватить имя функции, добавить его в сообщение об ошибке и отключить метку выражения по умолчанию. Например
stopcat <- function( str, ... ) {
msg <- sprintf( str, ... )
fun <- deparse(sys.call(1)[[1]])
msg <- paste0("(in ", fun, "): ", msg)
stop( msg, call.=FALSE)
}
pig <- function() {
cat( "piggy\n" )
stopcat( "no way! %d", 6 )
24 * 44
}
pig()
# piggy
# Error: (in pig): no way! 6