2016-05-14 2 views
0

Le code suivant produit l'erreur:erreur d'argument dans Quandl R

Error in match.arg(transform) : 'arg' should be one of “”, “diff”, “rdiff”, “normalize”, “cumul”, “rdiff_from” Called from: match.arg(transform)

library(Quandl) 
std_chart<-function(qcode, type="raw", transform= "", collapse="", logscale="", 
       main="", xlab="", ylab="", recession_shading=TRUE, hline="", 
       trend=""){ 
data<-Quandl(code=qcode,type=type,transform=transform,collapse=collapse) 
return(data) 
} 

std_chart(qcode="FRED/GDP", 
     logscale="log10", 
     main="Gross Domestic Product (GDP) Value", 
     ylab="Billions of Dollars") 

std_chart(qcode="FRED/GDP", 
     transform="", 
     logscale="log10", 
     main="Gross Domestic Product (GDP) Value", 
     ylab="Billions of Dollars") 

Les deux appels à la fonction de produire la même erreur. Quand je déboguer il semble que l'argument est l'un des choix par les éléments suivants:

Browse[1]> arg==choices[1] [1] TRUE

Je l'ai utilisé cette fonction Quandl plusieurs fois sans problème. Toute aide appréciée. Je pense que le problème est évident et qu'il me manque toujours. Ceci est juste une version simplifiée de ce que je suis en train de faire pour se concentrer sur l'erreur.

En utilisant la version R 3.1.2 Quandl Version 2.8.0

+0

Le message d'erreur semble assez claire. Je ne sais pas pourquoi vous pensez qu'un objet nommé 'choices' a quelque chose à voir avec ça. Si vous définissez la valeur par défaut de votre argument de transformation 'diff', vous recevez alors un message d'erreur indiquant qu'il n'y a pas de correspondance pour 'réduire', et si vous corrigez cela, vous obtenez une sortie attendue. Voter pour fermer comme trop trivial pour une réponse. –

+0

@ 42 Je suis content que ce soit clair pour vous. S'il vous plaît partager un peu plus de votre sagesse. L'instruction Quandl (code = "GOOG/AMEX_EEM", type = "raw", transform = "") produit l'erreur "arg" devrait être l'un des "", "diff", "rdiff", "normaliser", "cum "," Rdiff_from ". Pourquoi "" n'est pas valide pour passer? Dans ce cas, je ne veux pas de transformation. Je comprends que je pourrais appeler cette instruction sans le paramètre, mais j'essaye de construire une fonction qui traverse le paramètre de transformation. Je vous remercie. – rmacey

+0

Il est dit que l'argument "transformer" devrait être un de ces choix et vous avez donné à "transformer" une valeur "". Votre appel n'a pas transmis de valeur à transformer non plus. Eric LeCoutre et Macey ont donné deux solutions différentes, qui ont toutes deux un sens. Une troisième solution consiste à supprimer simplement 'transform = transformer 'de l'appel Quandl et vous obtiendrez la valeur par défaut pour ce paramètre. –

Répondre

1

au lieu de passer "" à la fonction, il faut passer NULL à la fonction. Il est étrange que la documentation d'une fonction telle que Quandl comprend

transform = c("", "diff", "rdiff", "normalize", "cumul", "rdiff_from")

qui semble suggérer que « » est un argument valable. Ainsi, au lieu d'appeler la fonction avec

Quandl(code,transform="") 

qui va générer l'erreur, utilisez

Quandl(code, transform=NULL). 
2

Si vous analysez la gestion des paramètres, autotractées la scène match.arg repose sur pmatch, qui ne gère pas les chaînes vides correspondant:

regard sur ?pmatch

pmatch("", "")        # returns NA 

Comme votre fonction std_chart est juste un wrapper autour de requêtes Quandl, je recommande basez votre code sur « ... »:

enstd_chart<-function(qcode, logscale="", 
       main="", xlab="", ylab="", 
       recession_shading=TRUE, hline="", 
       trend="",...){ 
# ...: parameters to be passed to Quandl call 
data<-Quandl(code=qcode,...) 
return(data) 
} 

std_chart(qcode="FRED/GDP", 
     logscale="log10", 
     main="Gross Domestic Product (GDP) Value", 
     ylab="Billions of Dollars") 

std_chart(qcode="FRED/GDP", 
     collapse="annual")