El código
foo <- function(df, column.name){
if (!column.name %in% colnames(df))
stop("Column ", column.name, " not found in ", deparse(substitute(df)))
mean(df$column.name) # por ejemplo
}
foo(iris, "petal.area")lanza el error
Error in foo(iris, "petal.area") : Column petal.area not found in iris
que es mucho más informativo gracias a la acción combinada de deparse + substitute.
En particular, substitute evita que R resuelva el valor de df, es decir, devuelve un símbolo, la referencia a df, en lugar de su contenido. Luego, deparse transforma ese símbolo en su representación textual, en el nombre del objeto.