2016-11-16 72 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)產生A1,A2,A11,A12,A21,A22的方式。否則,我必須手動將該功能應用於A1和A2以獲得A11,A12,A21,A22。

在這種簡單的情況下,手動應用函數並不是什麼大問題,但如果A包含很多值,並且每個後續值都有很多值,那麼這種手動應用會花費大量時間和效率。

我曾考慮過使用遞歸函數,但還沒有想出如何爲此概率編寫遞歸。有沒有使用遞歸來解決這個問題的任何想法?

+0

這可能會陷入無限循環。你的終止條件是什麼?我假設它不僅僅是這三個,而且你有更多的數據框,比如'A21','A22'等等。 – Aramis7d

回答

-1

對於給定的例子u能得到烏爾所需的輸出向量是這樣的:

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

通過調用rbind與do.call結合在一個單一的DF所有DFS,謝謝你的提示@Roland。 apply函數迭代df rowwise(sec。arg = 1)並將每行添加到crall。希望這有點你在找什麼

+1

使用'do.call(rbind,list(A,A1,A2))'組合數據框架。您的解決方案效率極低,並且會產生不必要的副作用。 – Roland

+0

我問了原來的問題。感謝您的想法。我想我需要更多地澄清我的問題。我的問題最初來自網絡爬行。 假設A是某個網頁。例如,如果我運行一個名爲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)來獲得所有這樣的鏈接, 。這有意義嗎? –

相關問題