2016-05-14 2 views
0

Следующий код выдает ошибку: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") 

Обе вызовы функции производят ту же ошибку. Когда я отладка, кажется, аргумент один из вариантов на следующее:

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

Я использовал эту функцию Quandl много раз без проблем. Любая помощь оценивается. Я думаю, что проблема очевидна, и я все еще пропущу ее. Это просто упрощенная версия того, что я на самом деле пытаюсь сделать, чтобы сосредоточиться на ошибке.

Использование R версии 3.1.2 Quandl версия 2.8.0

+0

сообщения об ошибке, кажется, достаточно ясно. Я не знаю, почему вы думаете, что объект с именем «выборы» имеет какое-то отношение к этому. Если вы делаете по умолчанию свой аргумент преобразования «diff», вы получаете сообщение об ошибке, говорящее, что нет совпадения «свернуть», и если вы исправите это, вы получите ожидаемый результат. Голосование закрывается как слишком тривиальное для ответа. –

+0

@ 42 Я рад, что это ясно для вас. Пожалуйста, поделитесь немного больше своей мудрости. Утверждение Quandl (code = "GOOG/AMEX_EEM", type = "raw", transform = "") приводит к ошибке «arg» должно быть одним из «», «diff», «rdiff», «normalize», «cumul» "," Rdiff_from ". Почему нет "", чтобы пройти? В этом случае я не хочу никакого преобразования. Я понимаю, что я могу вызвать этот оператор без параметра, но я пытаюсь построить функцию, которая проходит через параметр преобразования. Спасибо. – rmacey

+0

В нем говорится, что аргумент «transform» должен быть одним из этих вариантов, и вы дали «преобразовать» значение ». Ваш вызов не передал значение для преобразования. EricLeCoutre и Macey дали два разных решения, оба из которых имеют смысл. Третье решение - просто удалить «transform = transform» из вызова Quandl, и вы получите значение по умолчанию для этого параметра. –

ответ

1

Вместо прохождения «» функции, нужно передать NULL функции. Странно, что документация функции, такие как Quandl включает

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

, который, кажется, предполагают, что «» является веским аргументом. Таким образом, вместо того, чтобы вызвать функцию с

Quandl(code,transform="") 

, который будет генерировать ошибку, используйте

Quandl(code, transform=NULL). 
2

Если проанализировать управление параметрами, зады сцены match.arg опирающийся на pmatch, который не управляет пустые строки, соответствующие:

взгляд на ?pmatch

pmatch("", "")        # returns NA 

В вашей std_chart функции просто обертка запросов Quandl, я рекомендовал бы основывать свой код на «...»:

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") 
Смежные вопросы