2016-11-22 13 views
0

まず、私はこれに合った答えを見つけることができませんでした。R保存再帰変数

は私が働くこの機能

find.childrens <- function(categoria){ 
    x <- fromJSON(paste("https://api.mercadolibre.com/categories/",categoria,sep="")) 
    if(!is.null(nrow(x$children_categories))){ 
    for(i in 1:nrow(x$children_categories)){ 
    find.childrens(x$children_categories[i,1])} 
    }else{print(x$id)} 
} 

saving <- find.childrens(categoria="MLA122518") 

をしていますが、私は

誰もが私を助ける方法を知っている(プリントがどこにあるのリターンが行く)のリターンを保存カント? よろしく!

+0

あなたは値を返す必要があります – WillardSolutions

+0

私はしましたが、それは動作しません。 else {return(x $ id)}の代わりにelse {print(x $ id)} –

+1

上半分には戻り値がなく、ループ内で再帰的な再入力を呼び出しています。これらの結果を集め、何とかすべてを返す必要があります。 – johnjps111

答えて

2

を:

find.childrens <- function(categoria){ 
    x <- fromJSON(paste("https://api.mercadolibre.com/categories/",categoria,sep="")) 
    ids <- NULL 
    if(!is.null(nrow(x$children_categories))){ 
    for(i in 1:nrow(x$children_categories)){ 
     ids <- c(ids, find.childrens(x$children_categories[i,1])) 
    } 
    }else{ 
    ids <- x$id 
    } 
    return(ids) 
} 

saving <- find.childrens(categoria="MLA122518") 

> saving 
[1] "MLA385241" "MLA385242" 
0

あなたは両方の店に必要な機能を介して、再帰的なジャンプで返された値を返す:再帰関数は常に何かを返すと、多分あなたは、カテゴリの下にあるすべてのカテゴリをしたい場合は、IDSを連結する必要があります

library("jsonlite") 
find.childrens <- function(categoria) { 
    x <- fromJSON(paste("https://api.mercadolibre.com/categories/", categoria, sep="")) 
    count <- 0L 
    if (length(x[["children_categories"]])) { 
    for(i in seq_along(x[["children_categories"]][["id"]])) { 
     count <- count + find.childrens(x[["children_categories"]][i,"id"]) 
    } 
    } else { 
     count <- x[["total_items_in_this_category"]] 
    } 
    count 
} 

(saving <- find.childrens(categoria="MLA122518")) 
## [1] 113