2017-09-13 4 views
0

時間を節約するため、月の開始日と終了日のベクトルを繰り返して、毎回APIリクエストを行い、それぞれの出力を保存したい要求。R:開始日と終了日のリストを繰り返してAPIリクエストに挿入

は、我々は日付範囲の月の最初と最後の日を保持dateTableと呼ばれるデータフレームで始まる言う:

firstDOM lastDOM 
2016-05-01 2016-05-31 
2016-06-01 2016-06-30 
2016-07-01 2016-07-31 
2016-08-01 2016-08-31 
2016-09-01 2016-09-30 
2016-10-01 2016-10-31 
2016-11-01 2016-11-30 
2016-12-01 2016-12-31 
2017-01-01 2017-01-31 
2017-02-01 2017-02-28 
2017-03-01 2017-03-31 
2017-04-01 2017-04-30 
2017-05-01 2017-05-31 
2017-06-01 2017-06-30 
2017-07-01 2017-07-31 
2017-08-01 2017-08-31 

私はそれぞれの行を反復処理し、次のようにたstartDateとendDateに貼り付けたいです残りのAPIリクエストは、しかし、私は、コードのこの部分を実行している場合は、次のエラーを取得し、私はそれを引き起こしているのかわからないよ保つ:

for (i in 1:nrow(dateTable)) { 
startDate <- dateTable$firstDOM 
endDate <- dateTable$lastDOM 

#Obtian the Volume of Mentions by Day using declared specs from above 
qryMen <- GET(paste("https://newapi.brandwatch.com/projects/", projId, dataSpec 
       , "?queryId=", queryId, "&startDate=", startDate, "&endDate=", endDate 
       , '&pageSize=', pageSize, "&access_token=", accessToken$access_token, sep = "")) 
} 

#Error 
Error: length(url) == 1 is not TRUE 

任意の助けをいただければ幸いです!

答えて

1

現在、あなたは、各反復であなたのforループ全体のベクトルを渡すと、ループ変数によってインデックス化されていない、i

for (i in 1:nrow(dateTable)) { 
    startDate <- dateTable$firstDOM[[i]] 
    endDate <- dateTable$lastDOM[[i]] 
    ... 
} 

それにもかかわらず、反復するためにMap(または同等のmapply(..., SIMPLIFY=FALSE))を考えます2つの列を要素として示します。このアプローチを使用すると、dataTableの行に等しい要素数で、オブジェクトの大きなリスト(クエリが返すもの)を保存できます。その後、このリストを使用してさらに操作を行うことができます。

api_fct <- function(startDate, endDate) { 

    qryMen <- GET(paste0("https://newapi.brandwatch.com/projects/", projId, dataSpec 
       , "?queryId=", queryId, "&startDate=", startDate, "&endDate=", endDate 
       , '&pageSize=', pageSize, "&access_token=", accessToken$access_token)) 

} 

api_list <- Map(api_fct, dateTable$firstDOM, dateTable$lastDOM) 

# api_list <- mapply(api_fct, dateTable$firstDOM, dateTable$lastDOM, SIMPLIFY=FALSE) 
+0

私が持っていた問題を指摘してくれてありがとう!あなたのソリューションは機能し、私は適用される家族に時間を費やすでしょう –

0

あなたのforループは実際に何もしていません。あなたはfor i in ...と言っていますが、もう一度iを参照することはありません。そして、startDateとendDateをループに入れる理由はありません。また、サンプルデータを投稿して、自分が行っていることを再現できるようにすることもできます。

とにかく、何が間違っているのかを示すエラーです.GETのURLベクトルを渡すことはできません。 GET()に渡したすべてのものを取り出し、コンソールに貼り付けます。 n個のURLを取得します.nはdateTableの行数です。

GET(startDateとendDate以外)に渡すRオブジェクトが変更されないと仮定していますか?その場合、ループを使用する場合は、返すデータと同じ長さのベクトルを事前に割り当ててから、startDateとendDateをループし、GET()に渡してqryMenに挿入しますオブジェクト。

startDate <- dateTable$firstDOM 
endDate <- dateTable$lastDOM 
qryMen <- vector(mode = "list", length = nrow(dataTable) 
for (i in 1:nrow(dateTable)) { 
    qryMen[i] <- GET(paste("https://newapi.brandwatch.com/projects/", projId, 
       dataSpec, "?queryId=", queryId, 
       "&startDate=", startDate[i], 
       "&endDate=", endDate[i], 
       "&pageSize=", pageSize, 
       "&access_token=", accessToken$access_token, sep = "")) 
} 
+1

オブジェクトのリストを初期化せずに作成するには、R's * apply *ファミリを使用します。 – Parfait

+0

それも私がやることですが、Applyは新しいRユーザーを脅かす可能性があります。 (私はポスターが新しいと思っていますね) – CCD

関連する問題