2016-12-20 8 views
-1

* .docxファイルを含むフォルダがあります。私は以下のスクリプトをいくつかの種類のループ関数に変換して、すべてのdocxファイルを読みたいと思っていますが、実際にR関数を書く方法は分かりません。docxファイルを処理するためにRに関数を書く

library(docxtractr) 
real_world <- read_docx("C:/folder/doc1.docx") 
docx_tbl_count(real_world) 
tbls <- docx_extract_all_tbls(real_world) 
a <- as.data.frame(tbls) 

理想的には、新しい文書が抽出されるたびに新しいテーブルが追加されます。

おかげ Peddie

+1

[ここ](http://stackoverflow.com/questions/11433432/importing-multiple-csv-files-into-r)と同じ一般的な考えを使用 –

答えて

1

編集:私は用語「機能」はOPによるR関数の意味で使用されていなかったことを、この答えを想定し。 OPは問題を解決するためのアルゴリズムだと思う。

#### load packages #### 
library(docxtractr) 
library(plyr) 

#### load data #### 
# define path of dir 
pathto <- "stackoverflow/41251392/example/" 
# get path of every .docx-file in dir 
filelist <- list.files(path = pathto, pattern = "*.docx", full.names = TRUE) 
# read every file with docxtractr::read_docx() 
tablelist <- lapply(filelist, read_docx) 
# extract every table from every file with docxtractr::docx_extract_all_tbls() 
tables <- lapply(tablelist, docx_extract_all_tbls) 

#### append data to create one data.frame #### 
# combine extracted tables with plyr::ldply() 
ldply(lapply(tables, function(x) {ldply(x, data.frame)}), data.frame) 

最後の行はわかりにくいです。 ?plyr::ldplyをご覧ください。

+0

私はlapplyを使って試しましたが、私はリストで終わったオブジェクト。しかし、あなたの最後の夜は実際に魔法をやりました。私は実際に働くことができるオブジェクトを持っています。乾杯。 – PeddiePooh

1

私が意図した作品として、あなたのコードかどうかわかりません。しかしここでは、パス引数のある関数に変換して、そのパスの下にあるすべてのdocxをバッチ処理することができます(パスの最後にスラッシュを使用しないでください)。デフォルトの引数は、デフォルトのパスです:

library(docxtractr) 

docxextr <- function(pathh = ".") { 
    files <- list.files(path = pathh) 
    for (i in files) { 
     filen <- sprintf("%s/%s", pathh, i) 
     real_world <- read_docx(filen) 
     docx_tbl_count(real_world) # didn't understand where this count goes? 
     tbls <- docx_extract_all_tbls(real_world) 
     a <- as.data.frame(tbls) 
     return(a) 
    } 
} 
関連する問題