2012-01-30 5 views
3

Je lisais this question à SO et je me demandais s'il y avait un moyen d'utiliser is.numeric d'une manière vectorisée. Le point étant, si vous avez un moyen vectorisé de vérifier si une variable est numérique, alors toute fonction qui dépend de la variable étant numérique peut être vectorisée. Sinon, il ne peut pas être vectorisé.Existe-t-il un moyen vectorisé d'utiliser is.numeric?

+0

'is.numeric' est vectorisé ... pouvez-vous donner un exemple de ce à quoi vous pensez? –

+3

Je suppose que le questionneur pense que 'is.numeric (1: 5)' devrait donner un vecteur de VRAI 5 long plutôt qu'un seul VRAI. donc quelque chose comme 'spply (1: 5, is.numeric)' – Justin

+1

@ Justin: ah, alors la réponse est "non". Vous ne pouvez pas mélanger des types dans un vecteur atomique, il serait donc redondant de retourner une valeur 'TRUE' ou' FALSE' pour chaque élément du vecteur. Vous pouvez mélanger des types dans une liste (qui est ce qu'est un data.frame), et c'est là que vous devriez utiliser votre solution 'spply'. –

Répondre

7

Selon les commentaires:

si vous cherchez à tester les colonnes d'un data.frame avec as.numeric, utilisez apply

> dat <- data.frame(v1=1:5,v2=letters[1:5],v3=rnorm(5),v4=c(1,2,'c','d',5)) 

> sapply(dat,is.numeric) 
    v1 v2 v3 v4 
TRUE FALSE TRUE FALSE 

Ou, pour la variété, vous pouvez utiliser colwise de le paquet plyr:

> colwise(is.numeric)(dat) 
    v1 v2 v3 v4 
1 TRUE FALSE TRUE FALSE 
+1

Le paquet 'plyr' a une fonction' numcolwise' qui peut automatiquement appliquer n'importe quelle fonction aux colonnes numériques d'une trame de données. – Ramnath

0

Cela devrait donner le résultat souhaité:

rep(is.numeric(x), length(x)) 
+1

Cependant, étant donné une liste mixte: 'x <-list ('a', 2, 'c', 4)' ceci donnera un vecteur de tout 'FALSE' puisque' is.numeric (x) 'est' FALSE' . 'lapply (x, is.numeric)' donne les résultats attendus. – Justin

+0

@Justin: Je m'attendais à ce que l'entrée soit une seule "variable" que j'ai prise pour être un vecteur atomique. Pour différentes interprétations du libellé de la question, votre méthode pourrait s'appliquer. –

Questions connexes