2011-07-01 15 views
9

Aquí está mi código actual:En R, ¿cómo usar un valor predeterminado "nulo" para un argumento de una función?

my.function <- function(my.arg=""){ 
    if(my.arg == "") 
    my.arg <- rnorm(10) 
    return(mean(my.arg)) 
} 

Me vuelve este:

> my.function(rbinom(10, 100, 0.2)) 
[1] 18.5 
Warning message: 
In if (a == "") a <- rnorm(10) : 
    the condition has length > 1 and only the first element will be used 

he intentado con my.arg=c() o my.arg=0, pero siempre consigo una advertencia o un error. Y el manual R no dice mucho sobre este tema.

¿Alguna idea? ¡Gracias por adelantado!

+0

por lo que desea devolver el valor medio de una distribución arbitraria, y si no le pasa una distribución y los parámetros adecuados ?, desea devuelve la media de 'rnorm (10)'? – Chase

+0

@Chase sí, pero es solo un ejemplo falso, mi función "real" es más complicada ... La solución de Karsten funciona. – tflutre

+0

¿Qué esperarías de 'my.function (NA)'? – Henry

Respuesta

15

tratar

my.function <- function(my.arg=NULL){ 
if(is.null(my.arg)) ... 
10

También hay missing: enfoque

my.function <- function(my.arg) { 
    if(missing(my.arg)) ... 
3

de Karsten es correcta. El motivo de la advertencia es que está probando my.arg contra "", que es un vector de caracteres de longitud 1, por lo tanto, la advertencia cuando my.arg es un vector de longitud> 1. Si realmente deseaba probar si mi .arg es "" necesitaría hacer algo como

if (length(my.arg) == 1 && my.arg == "") 
Cuestiones relacionadas