2016-11-16 19 views
-1

私は簡単な例を使って私の質問を説明するのが簡単だと思います。関数の出力を再帰的に出力する方法は、自動的にRの同じ関数の入力となりますか?

Name <- c("A1", "A2") 
A <- data.frame(Name) 

Name <- c("A11", "A12") 
A1 <- data.frame(Name) 

Name <- c("A21", "A22") 
A2 <- data.frame(Name) 

crawl_F <- function(x) { 
    return(x[,1]) 
} 
crawl_F(A) 

この例では、crawl_F(A)はA1、A2となります。しかし、私は、crawl_F(A)がcrawl_F(A)を1回呼び出すだけで、A1、A2、A11、A12、A21、A22という結果になることを理解したい。さもなければ、私はA11、A12、A21、A22を得るために関数をA1とA2に手動で適用しなければならない。

このような単純なケースでは、関数の手動適用は大きな問題ではありませんが、Aに多くの値が含まれ、後続の各値にも多くの値がある場合、そのような手動による適用には膨大な時間と非効率がかかります。

私は再帰関数を使うことを考えましたが、この問題の再帰を書く方法を考え出していません。この問題を解決するために再帰を使用するかどうかにかかわらず、任意のアイデアですか?

crall <- apply(do.call(rbind, list(A, A1, A2)), 1, function(x) { append(crall, x) }) 

がヒント@Rolandため、do.callでrbind呼び出すことで感謝を単一DF内のすべてのDFSを組み合わせる:uは次のようにウル所望の出力ベクトルを得ることができます与え例えば

+0

これは潜在的に無限ループに入っています。あなたの終了条件は何ですか?私はそれがこれらの3つだけではないと仮定しています。そして、あなたは 'A21'、' A22'のようなデータフレームをたくさん持っています。 – Aramis7d

答えて

-1

。 apply関数はdfを行方向に反復し(秒arg = 1)、各行をcrallに追加します。これがほしいと思っています。

+1

'do.call(rbind、list(A、A1、A2))'を使ってdata.framesを結合します。あなたのソリューションは非常に非効率的であり、不要な副作用が恐ろしいものです。 – Roland

+0

私は元の質問をしました。あなたのアイデアをありがとう。私はもう少し私の質問を明確にする必要があると思う。私の質問は、もともとウェブクロールから生じています。 Aが特定のWebページであるとしましょう。例えば、関数crawl_F(x)を実行すると、この関数はAに見つかったリンクを吐き出します。この場合、A1とA2になります。 A1とA2に対してcrawl_F(x)を実行すると、A1とA2のそれぞれに(A11とA12)、(A21とA22)のそれぞれのリンクが表示されます。ここで問題となるのは、Aに対して関数を実行すると、どのリンクが生成されるかわからないということです。 –

+0

つまり、A1、A2、A11、A12、A21、A22は事前に分かりません。私はすべてのリンクをA上に見つけて、Aの結果リンク、結果の結果へのリンクなどを探しています...私の最初の質問は、crawl_F(A)を呼び出すことによってこのようなリンクをすべて取得する方法を知ることです。 。これは理にかなっていますか? –

関連する問題