我有一個很長的腳本在R用於網頁抓取。我正在使用rvest函數來刮擦和rodbc將我的數據寫入SQL服務器數據庫。如何創建一個函數在R中刪除和重新創建數據框?
我想讓我的代碼瀏覽站點的麪包屑並將結果寫入名爲scrapeRow的向量,然後我想將該向量寫入名爲scrapeDF的單行數據框,然後將該數據框寫入我的SQL服務器。最後,我想刪除數據框並重新創建一個空的版本,以便在下一個向量中寫入。我從不希望數據框一次包含多於一行。
根據有多少麪包屑,「寫入」步驟可能發生在腳本的多個點上。由於這個原因,我想定義一個函數來「清除」數據框,並在數據寫入數據庫之後對其進行重建。
我的代碼寫成這樣:
clearScrapeDF <- function(x) {
if(exists('scrapeDF')) {rm(x)}
x <- as.data.frame(matrix(nrow=1, ncol=13));
names(x) = c(
'cat1', 'cat2', 'cat3', 'cat4', 'cat5',
'Prod', 'Prod_Url', 'Prod_Name',
'Vendor', 'Vend_Prod', 'Price', 'UOM', 'MetaLoadDt')}
功能內的各條線做的正是我想要當x被替換爲「scrapeDF」他們這樣做。然而,clearScrapeDF(scrapeDF)對現有的scrapeDF數據框沒有任何作用,如果不存在,它也不會創建一個。
我相信我對R中函數的工作方式有一個根本性的誤解。 請幫我理解如何以編程方式刪除數據框並在循環中重建它。我想在一個函數中調用它,因爲它將在我的代碼的許多獨立部分。謝謝。
您正在查找:將'x'或'return(x)'添加到函數的最後一行。然後調用'output = clearScrapeDF(scrapeDF)'你函數的最後一行不會像你打算的那樣返回'x'。 – Vlo
就是這樣!我不知道我需要在這種情況下返回x。謝謝你,謝謝你,謝謝你。 –
函數的最後一行隱式返回。使用'return'可以使你的代碼更具可讀性,或者可以用它來結束函數並在所有代碼運行之前返回一個對象。例如,'代碼; (條件)返回(對象);更多代碼' – Vlo