Code
<- function(temp) {
fahr_to_kelvin if (!is.numeric(temp)) {
stop("temp must be a numeric vector.") # condiciones
}<- ((temp - 32) * (5 / 9)) + 273.15
kelvin return(kelvin)
}
Es importante garantizar que las funciones se utilicen solo para los propósitos previstos. Este concepto se llama programación defensiva, y consiste en verificar que se cumplan las condiciones necesarias para que la función funcione correctamente. Si alguna condición falla, se debe generar un error para prevenir comportamientos inesperados.
Vamos a usar las funciones stop()
y stopifnot()
para detener el código cuando hay un error.
Para más información sobre stopifnot()
puedes leer su manual.
stop()
con if()
El argumento temp debe ser un valor numeric. Para crear un error, podemos usar la función stop()
. Por ejemplo, dado que el argumento temp debe ser un vector numeric, podríamos probarlo con un condicional if()
y devolver un error si la condición no se cumple. Podríamos agregar esto a nuestra función de la siguiente manera:
<- function(temp) {
fahr_to_kelvin if (!is.numeric(temp)) {
stop("temp must be a numeric vector.") # condiciones
}<- ((temp - 32) * (5 / 9)) + 273.15
kelvin return(kelvin)
}
fahr_to_kelvin(temp = 32)
[1] 273.15
fahr_to_kelvin(temp = "A")
# Error in fahr_to_kelvin(temp = "A") : temp must be a numeric vector.
stopifnot()
<- function(temp) {
fahr_to_kelvin stopifnot(is.numeric(temp)) # condiciones
<- ((temp - 32) * (5 / 9)) + 273.15
kelvin return(kelvin)
}
fahr_to_kelvin(temp = 32)
[1] 273.15
fahr_to_kelvin(temp = as.factor(32))
# Error in fahr_to_kelvin(temp = as.factor(32)) :
# is.numeric(temp) is not TRUE
warning()
y message()
con if()
<- function(x) {
squareX if (is.character(x)) {
warning("Converting x to numeric")
<- as.numeric(x)
x else {
} # the type checking done here is of course very incomplete
message("x appears to be numeric")
}^ 2
x }
squareX("4")
Warning in squareX("4"): Converting x to numeric
[1] 16
squareX(4)
x appears to be numeric
[1] 16
assertthat
Instalar el paquete:
install.packages("assertthat")
El paquete assertthat
realiza lo mismo que stopifnot
.
Ejemplos:
library(assertthat) ## Mensajes de error
<- 1:10
x stopifnot(is.character(x))
# Error: is.character(x) is not TRUE
assert_that(is.character(x))
# Error: x is not a character vector
assert_that(length(x) == 5)
# Error: length(x) not equal to 5
assert_that(is.numeric(x))
# [1] TRUE
Para más información sobre assertthat
puedes leer su manual.
<- function(x) {
foo_message ::assert_that(x == 1, msg = "x must always be 1")
assertthat"yay"
} # verficacion
foo_message(1)
[1] "yay"
Un script es una colección de varias instrucciones de R escritas en un archivo. La extensión de los script en R es .r
o .R
. En los scripts podemos colocar comentarios, paquetes, instrucciones de tal forma que pueda ser ejecutado sin problemas.
Cargando la función almacenada en un RData
<- function(x) {
squareX if (is.character(x)) {
warning("Converting x to numeric")
<- as.numeric(x)
x else {
} # the type checking done here is of course very incomplete
message("x appears to be numeric")
}^ 2
x
}# Guardar
save(squareX, file="./squareX.Rdata")
rm(squareX) # eliminar funcion
Cargar en el ambiente de RStudio
load("./squareX.Rdata")
Si has estado escribiendo estas funciones en un script de R aparte (¡una buena idea!), puedes cargar las funciones en nuestra sesión de R usando la función source()
, en caso de no estar el script en nuestro directorio de trabajo debemos fijarlo o poner la ruta completa al script.
source("squareX_function.R")