前回までのrPubsページ
- 第1章:準備運動
- 第2章:UNIXコマンドの基礎
前回引き続き、言語処理100本ノック(2015年版)を解きます。
(下記の『前書き(言語処理100本ノックについて)』は前回とほぼ同じです)
前書き(言語処理100本ノックについて)
- 本稿では、東北大学の乾・岡崎研究室で公開されている言語処理100本ノック(2015年版)を、R言語で解いていきます。
- 改訂前の言語処理100本ノックも同様に上記研究室のサイトにあります。
前書き(Rに関して)
- Rの構文や関数についての説明は一切ありませんので、あらかじめご了承ください。
- 本稿では、{base}にある文字列処理ではなく、{stringr}(1.0.0以上)とパイプ処理、外部ファイルの読み込みは{readr}を極力用いております({stringi}も処理に応じて活用していきます)。課題によってはパイプ処理でこなすのに向かない状況もありますので、あらかじめご了承ください。
参考ページ
{stringr}と{stringi}
hadley/stringr
RPubs - このパッケージがすごい2014: stringr
stringiで輝く☆テキストショリスト
stringr 1.0.0を使ってみる
{jsonlite}
jeroenooms/jsonlite Getting started with JSON and jsonlite
jsonliteで要素ひとつだけのベクトルをうまくtoJSON()する
{xml2}
hadley/xml2
ご意見やご指摘など
- こうした方が良いやこういう便利な関数がある、間違いがあるなど、ご指摘をお待ちしております。
- 下記のいずれかでご連絡・ご報告いただけますと励みになります(なお、Gitに慣れていない人です)。
Twitter, GitHub
library(knitr)
library(readr)
library(dplyr)
library(stringr)
library(stringi)
library(jsonlite)
library(xml2)
knitr::opts_chunk$set(comment = NA)
# 引数と出力などの説明は省略
extractMatch <- function (res) {
return(
res %>%
t %>%
as.vector %>%
na.omit %>%
as.character
)
}
# 引数と出力などの説明は省略
replaceByPatternList <- function (
target_vec,
pattern_list
) {
for (i in seq(from = 1, to = length(pattern_list))) {
target_vec <- target_vec %>%
stringr::str_replace_all(
pattern = pattern_list[[i]]$pattern,
replacement = pattern_list[[i]]$replacement
)
}
return(target_vec)
}
# 第3章の入力データURL(固定)
TASK_INPUT_URL <- "http://www.cl.ecei.tohoku.ac.jp/nlp100/data/jawiki-country.json.gz"
# 複数の課題で必要とされるファイル名を、UNIXコマンド用に取得しておく
TASK_FILE_NAME <- basename(TASK_INPUT_URL)
# 本タスクで使用する記事の絞り込みキーワード
TASK_SEARCH_QUERY <- "イギリス"
# ファイル取得
if (!file.exists(file = TASK_FILE_NAME)) {
download.file(
url = TASK_INPUT_URL, destfile = TASK_FILE_NAME,
method = "wget", quiet = FALSE
)
}
Wikipedia記事のJSONファイルを読み込み,「イギリス」に関する記事本文を表示せよ.問題21-29では,ここで抽出した記事本文に対して実行せよ.
# readr::read_lines()でfile引数に.gzファイルを与えると、自動的に解凍して読み込める
# 今回は明示的にcloseさせる
if (file.exists(file = TASK_FILE_NAME)) {
input_con <- gzfile(
description = TASK_FILE_NAME,
open = "rb", encoding = "UTF-8"
)
} else {
stop("File not found.")
}
search_res <- readr::read_lines(
file = input_con, n_max = -1
) %>%
lapply(
X = .,
FUN = function (json) {
parsed_json <- jsonlite::fromJSON(txt = json)
if (is.element(parsed_json$title, TASK_SEARCH_QUERY)) {
return(parsed_json$text)
} else {
return(NULL)
}
}
) %>%
unlist %>%
readr::read_lines(
file = ., n_max = -1
)
close(input_con)
# 長いので出力は省略
記事中でカテゴリ名を宣言している行を抽出せよ.
CATEGORY_DEF_RE <- "\\[{2}Category:(.*)\\]{2}"
search_res %>%
stringr::str_subset(pattern = CATEGORY_DEF_RE)
[1] "[[Category:イギリス|*]]"
[2] "[[Category:英連邦王国|*]]"
[3] "[[Category:G8加盟国]]"
[4] "[[Category:欧州連合加盟国]]"
[5] "[[Category:海洋国家]]"
[6] "[[Category:君主国]]"
[7] "[[Category:島国|くれいとふりてん]]"
[8] "[[Category:1801年に設立された州・地域]]"
記事のカテゴリ名を(行単位ではなく名前で)抽出せよ.
CATEGORY_RE <- "\\[{2}Category:(.*)\\|.*?\\]{2}|\\[{2}Category:(.*)\\]{2}"
(search_res %>%
stringr::str_match(pattern = CATEGORY_RE)
)[, -1] %>%
extractMatch(.)
[1] "イギリス" "英連邦王国"
[3] "G8加盟国" "欧州連合加盟国"
[5] "海洋国家" "君主国"
[7] "島国" "1801年に設立された州・地域"
記事中に含まれるセクション名とそのレベル(例えば“== セクション名 ==”なら1)を表示せよ.
SECTION_RE <- "^\\=\\={1,}(.*?)\\=(\\={1,})"
(search_res %>%
stringr::str_match(pattern = SECTION_RE)
)[, -1] %>%
na.omit %>%
data.frame(
section = .[, 1], level = stringr::str_length(.[, 2])
) %>%
dplyr::select(section, level) %>%
dplyr::arrange(desc(level))
section level
1 イギリスのポピュラー音楽 3
2 気候 2
3 主要都市 2
4 鉱業 2
5 農業 2
6 貿易 2
7 通貨 2
8 企業 2
9 道路 2
10 鉄道 2
11 海運 2
12 航空 2
13 言語 2
14 宗教 2
15 婚姻 2
16 教育 2
17 食文化 2
18 文学 2
19 哲学 2
20 音楽 2
21 映画 2
22 コメディ 2
23 国花 2
24 世界遺産 2
25 祝祭日 2
26 サッカー 2
27 競馬 2
28 モータースポーツ 2
29 国名 1
30 歴史 1
31 地理 1
32 政治 1
33 外交と軍事 1
34 地方行政区分 1
35 科学技術 1
36 経済 1
37 交通 1
38 通信 1
39 国民 1
40 文化 1
41 スポーツ 1
42 脚注 1
43 関連項目 1
44 外部リンク 1
記事から参照されているメディアファイルをすべて抜き出せ.
MEDIA_RE <- "File:(.*?)\\||ファイル:(.*?)\\|"
(search_res %>%
stringr::str_match(pattern = MEDIA_RE)
)[, -1] %>%
extractMatch(.)
[1] "Royal Coat of Arms of the United Kingdom.svg"
[2] "Battle of Waterloo 1815.PNG"
[3] "The British Empire.png"
[4] "Uk topo en.jpg"
[5] "BenNevis2005.jpg"
[6] "Elizabeth II greets NASA GSFC employees, May 8, 2007 edit.jpg"
[7] "Palace of Westminster, London - Feb 2007.jpg"
[8] "David Cameron and Barack Obama at the G20 Summit in Toronto.jpg"
[9] "Soldiers Trooping the Colour, 16th June 2007.jpg"
[10] "Scotland Parliament Holyrood.jpg"
[11] "London.bankofengland.arp.jpg"
[12] "City of London skyline from London City Hall - Oct 2008.jpg"
[13] "Oil platform in the North SeaPros.jpg"
[14] "Eurostar at St Pancras Jan 2008.jpg"
[15] "Heathrow T5.jpg"
[16] "Anglospeak.svg"
[17] "CHANDOS3.jpg"
[18] "The Fabs.JPG"
[19] "PalaceOfWestminsterAtNight.jpg"
[20] "Westminster Abbey - West Door.jpg"
[21] "Edinburgh Cockburn St dsc06789.jpg"
[22] "Canterbury Cathedral - Portal Nave Cross-spire.jpeg"
[23] "Kew Gardens Palm House, London - July 2009.jpg"
[24] "2005-06-27 - United Kingdom - England - London - Greenwich.jpg"
[25] "Stonehenge2007 07 30.jpg"
[26] "Yard2.jpg"
[27] "Durham Kathedrale Nahaufnahme.jpg"
[28] "Roman Baths in Bath Spa, England - July 2006.jpg"
[29] "Fountains Abbey view02 2005-08-27.jpg"
[30] "Blenheim Palace IMG 3673.JPG"
[31] "Liverpool Pier Head by night.jpg"
[32] "Hadrian's Wall view near Greenhead.jpg"
[33] "London Tower (1).JPG"
[34] "Wembley Stadium, illuminated.jpg"
記事中に含まれる「基礎情報」テンプレートのフィールド名と値を抽出し,辞書オブジェクトとして格納せよ
# {{ }}でテンプレートを定義
# |X = Y
# X = フィールド名, Y = 値
BASIC_INFO_RE <- list(
START = "\\{{2}基礎情報\\s*(.*?)",
TEMPLATE = "^\\|(.*?)\\s*\\=\\s*(.*)",
PAREN_START = "\\{{2}", PAREN_END = "\\}{2}"
)
BR_RE <- "\\<br\\/\\>"
# 基礎情報の開始位置
basic_info_start_idx <- (search_res %>%
stringr::str_detect(pattern = BASIC_INFO_RE$START) %>%
which.max
) + 1
# {{ }}の範囲(入れ子あり)
paren_range_idx <- (
(
(search_res %>%
stringr::str_count(pattern = BASIC_INFO_RE$PAREN_START) %>%
cumsum
) -
(search_res %>%
stringr::str_count(pattern = BASIC_INFO_RE$PAREN_END) %>%
cumsum
)
) > 0
) %>%
which
basic_info_df <- (
search_res %>%
data.frame %>%
dplyr::slice(
seq(
from = basic_info_start_idx,
to = which.min(
is.element(
seq(from = 1, to = length(search_res)),
unique(c(1, paren_range_idx))
)
) - 1
)
) %>%
unlist %>%
stringr::str_c(collapse = "\\n") %>%
stringr::str_replace_all(
pattern = stringr::str_c(BR_RE, "\\\\n", sep = ""), replacement = BR_RE
) %>%
stringr::str_split(pattern = "\\\\n") %>%
unlist %>%
stringr::str_match(pattern = BASIC_INFO_RE$TEMPLATE)
)[, -1] %>%
data.frame(field = .[, 1], value= .[, 2]) %>%
dplyr::select(field, value)
basic_info <- as.character(basic_info_df$value)
names(basic_info) <- basic_info_df$field
basic_info_df
field
1 略名
2 日本語国名
3 公式国名
4 国旗画像
5 国章画像
6 国章リンク
7 標語
8 国歌
9 位置画像
10 公用語
11 首都
12 最大都市
13 元首等肩書
14 元首等氏名
15 首相等肩書
16 首相等氏名
17 面積順位
18 面積大きさ
19 面積値
20 水面積率
21 人口統計年
22 人口順位
23 人口大きさ
24 人口値
25 人口密度値
26 GDP統計年元
27 GDP値元
28 GDP統計年MER
29 GDP順位MER
30 GDP値MER
31 GDP統計年
32 GDP順位
33 GDP値
34 GDP/人
35 建国形態
36 確立形態1
37 確立年月日1
38 確立形態2
39 確立年月日2
40 確立形態3
41 確立年月日3
42 確立形態4
43 確立年月日4
44 通貨
45 通貨コード
46 時間帯
47 夏時間
48 ISO 3166-1
49 ccTLD
50 国際電話番号
51 注記
value
1 イギリス
2 グレートブリテン及び北アイルランド連合王国
3 {{lang|en|United Kingdom of Great Britain and Northern Ireland}}<ref>英語以外での正式国名:<br/>*{{lang|gd|An Rìoghachd Aonaichte na Breatainn Mhòr agus Eirinn mu Thuath}}([[スコットランド・ゲール語]])<br/>*{{lang|cy|Teyrnas Gyfunol Prydain Fawr a Gogledd Iwerddon}}([[ウェールズ語]])<br/>*{{lang|ga|Ríocht Aontaithe na Breataine Móire agus Tuaisceart na hÉireann}}([[アイルランド語]])<br/>*{{lang|kw|An Rywvaneth Unys a Vreten Veur hag Iwerdhon Glédh}}([[コーンウォール語]])<br/>*{{lang|sco|Unitit Kinrick o Great Breetain an Northren Ireland}}([[スコットランド語]])<br/>**{{lang|sco|Claught Kängrick o Docht Brätain an Norlin Airlann}}、{{lang|sco|Unitet Kängdom o Great Brittain an Norlin Airlann}}(アルスター・スコットランド語)</ref>
4 Flag of the United Kingdom.svg
5 [[ファイル:Royal Coat of Arms of the United Kingdom.svg|85px|イギリスの国章]]
6 ([[イギリスの国章|国章]])
7 {{lang|fr|Dieu et mon droit}}<br/>([[フランス語]]:神と私の権利)
8 [[女王陛下万歳|神よ女王陛下を守り給え]]
9 Location_UK_EU_Europe_001.svg
10 [[英語]](事実上)
11 [[ロンドン]]
12 ロンドン
13 [[イギリスの君主|女王]]
14 [[エリザベス2世]]
15 [[イギリスの首相|首相]]
16 [[デーヴィッド・キャメロン]]
17 76
18 1 E11
19 244,820
20 1.3%
21 2011
22 22
23 1 E7
24 63,181,775<ref>[http://esa.un.org/unpd/wpp/Excel-Data/population.htm United Nations Department of Economic and Social Affairs>Population Division>Data>Population>Total Population]</ref>
25 246
26 2012
27 1兆5478億<ref name="imf-statistics-gdp">[http://www.imf.org/external/pubs/ft/weo/2012/02/weodata/weorept.aspx?pr.x=70&pr.y=13&sy=2010&ey=2012&scsm=1&ssd=1&sort=country&ds=.&br=1&c=112&s=NGDP%2CNGDPD%2CPPPGDP%2CPPPPC&grp=0&a= IMF>Data and Statistics>World Economic Outlook Databases>By Countrise>United Kingdom]</ref>
28 2012
29 5
30 2兆4337億<ref name="imf-statistics-gdp" />
31 2012
32 6
33 2兆3162億<ref name="imf-statistics-gdp" />
34 36,727<ref name="imf-statistics-gdp" />
35 建国
36 [[イングランド王国]]/[[スコットランド王国]]<br />(両国とも[[連合法 (1707年)|1707年連合法]]まで)
37 [[927年]]/[[843年]]
38 [[グレートブリテン王国]]建国<br />([[連合法 (1707年)|1707年連合法]])
39 [[1707年]]
40 [[グレートブリテン及びアイルランド連合王国]]建国<br />([[連合法 (1800年)|1800年連合法]])
41 [[1801年]]
42 現在の国号「'''グレートブリテン及び北アイルランド連合王国'''」に変更
43 [[1927年]]
44 [[スターリング・ポンド|UKポンド]] (£)
45 GBP
46 ±0
47 +1
48 GB / GBR
49 [[.uk]] / [[.gb]]<ref>使用は.ukに比べ圧倒的少数。</ref>
50 44
51 <references />
25の処理時に,テンプレートの値からMediaWikiの強調マークアップ(弱い強調,強調,強い強調のすべて)を除去してテキストに変換せよ(参考: マークアップ早見表)
# 強調マークアップ
# ''弱い強調''
# '''強調'''
# '''''強い強調'''''
EMPHASIS_RE <- "\\'{2,5}"
basic_info_26 <- basic_info %>%
stringr::str_replace_all(
pattern = EMPHASIS_RE, replacement = ""
)
names(basic_info_26) <- names(basic_info)
# 出力は省略(28. でまとめて表示)
26の処理に加えて,テンプレートの値からMediaWikiの内部リンクマークアップを除去し,テキストに変換せよ(参考: マークアップ早見表).
# 内部リンクマークアップ
# [[記事名#節名|表示文字]]
# [[記事名|表示文字]]
# [[記事名]]
INTERNAL_LINK_RE <- list(
list(
pattern = "\\[{2}(.*?)\\#.*?\\|.*?\\]{2}",
replacement = "\\[\\[\\1\\]\\]"
),
list(
pattern = "\\[{2}(.*?)\\|.*?\\]{2}",
replacement = "\\[\\[\\1\\]\\]"
),
list(
pattern = "\\[{2}(.*?)\\]{2}",
replacement = "\\1"
)
)
# 「上記の内部リンクマークアップ」を上から順に適用していく
basic_info_27 <- replaceByPatternList(
target_vec = basic_info_26,
pattern_list = INTERNAL_LINK_RE
)
names(basic_info_27) <- names(basic_info)
# 出力は省略(28. でまとめて表示)
27の処理に加えて,テンプレートの値からMediaWikiマークアップを可能な限り除去し,国の基本情報を整形せよ.
# replaceByPatternListの定義にて、引数pattern_listの要素の名前属性を小文字にしているので小文字に統一
REPLACE_RE <- list(
list(
pattern = "\\{{2}.*?\\|.*?\\|(.*)\\}{2}",
replacement = "\\{\\{\\1\\}\\}"
)
)
PRE_DELETE_RE <- list(
REF_TAG = "\\<ref\\>.*?\\<\\/ref\\>"
)
DELETE_RE <- list(
REFERENCES_TAG = "\\<references \\/\\>",
BR_TAG = "\\<br\\s*\\/\\>",
NBSP = "\\ ",
REF_LINK = "\\<ref\\s*?name\\=.*?\\>.*?\\[http.*?\\].*?\\<\\/ref\\>",
REF_NAME = "\\<ref\\s*?name\\=.*?\\s*?\\/\\>",
FILE_LINK = "File:.*?|ファイル:.*?",
PAREN = "\\{{2}|\\}{2}"
)
basic_info_28 <- replaceByPatternList(
target_vec = basic_info_27,
pattern_list = REPLACE_RE
) %>%
replaceByPatternList(
target_vec = .,
pattern_list = lapply(
X = list(PRE_DELETE_RE, DELETE_RE),
FUN = function (pattern) {
return (
list(
pattern = stringr::str_c(unlist(pattern), collapse = "|"),
replacement = ""
)
)
}
)
)
names(basic_info_28) <- names(basic_info)
basic_info_28
略名
"イギリス"
日本語国名
"グレートブリテン及び北アイルランド連合王国"
公式国名
"United Kingdom of Great Britain and Northern Ireland"
国旗画像
"Flag of the United Kingdom.svg"
国章画像
"Royal Coat of Arms of the United Kingdom.svg"
国章リンク
"(イギリスの国章)"
標語
"Dieu et mon droit(フランス語:神と私の権利)"
国歌
"女王陛下万歳"
位置画像
"Location_UK_EU_Europe_001.svg"
公用語
"英語(事実上)"
首都
"ロンドン"
最大都市
"ロンドン"
元首等肩書
"イギリスの君主"
元首等氏名
"エリザベス2世"
首相等肩書
"イギリスの首相"
首相等氏名
"デーヴィッド・キャメロン"
面積順位
"76"
面積大きさ
"1 E11"
面積値
"244,820"
水面積率
"1.3%"
人口統計年
"2011"
人口順位
"22"
人口大きさ
"1 E7"
人口値
"63,181,775"
人口密度値
"246"
GDP統計年元
"2012"
GDP値元
"1兆5478億"
GDP統計年MER
"2012"
GDP順位MER
"5"
GDP値MER
"2兆4337億"
GDP統計年
"2012"
GDP順位
"6"
GDP値
"2兆3162億"
GDP/人
"36,727"
建国形態
"建国"
確立形態1
"イングランド王国/スコットランド王国(両国とも連合法 (1707年)まで)"
確立年月日1
"927年/843年"
確立形態2
"グレートブリテン王国建国(連合法 (1707年))"
確立年月日2
"1707年"
確立形態3
"グレートブリテン及びアイルランド連合王国建国(連合法 (1800年))"
確立年月日3
"1801年"
確立形態4
"現在の国号「グレートブリテン及び北アイルランド連合王国」に変更"
確立年月日4
"1927年"
通貨
"スターリング・ポンド (£)"
通貨コード
"GBP"
時間帯
"±0"
夏時間
"+1"
ISO 3166-1
"GB / GBR"
ccTLD
".uk / .gb"
国際電話番号
"44"
注記
""
テンプレートの内容を利用し,国旗画像のURLを取得せよ.(ヒント: MediaWiki APIのimageinfoを呼び出して,ファイル参照をURLに変換すればよい)
SEARCH_FIELD_WORD <- "国旗画像"
WIKI_URL <- list(
BASE = "https://ja.wikipedia.org/wiki/",
API = "https://ja.wikipedia.org/w/api.php"
)
# 名前属性をAPIのパラメータ名に使用するので小文字表記
API_PARAM <- list(
action = "query",
prop = "imageinfo",
format = "json",
titles = stringr::str_c("Image", xml2::url_escape(x = as.character(basic_info_28[SEARCH_FIELD_WORD])), sep = ":")
)
HTML_PARAM <- list(
XPATH = ".//a[@href][@class='internal']",
TARGET = "href"
)
api_res <- jsonlite::fromJSON(
txt = stringr::str_c(
WIKI_URL$API,
sapply(seq(from = 1, to = length(API_PARAM)), function (param_i) {
return (
stringr::str_c(names(API_PARAM)[param_i], API_PARAM[[param_i]], sep = "=")
)
}) %>%
stringr::str_c(collapse = "&"),
sep = "?"
)
)
# 画像のURLが取得できたので、ついでに元データを取得してみる
image_url <- xml2::read_html(
x = stringr::str_c(
WIKI_URL$BASE, as.character(api_res$query$normalized["to"]),
sep = ""
),
encoding = "UTF-8"
) %>%
xml2::xml_find_all(xpath = HTML_PARAM$XPATH, ns = xml_ns(.)) %>%
xml2::xml_attr(attr = HTML_PARAM$TARGET)
# 出力ファイルは"plot.svg"で固定(プロット用)
download.file(
url = stringr::str_c("https", image_url, sep = ":"), destfile = "plot.svg",
method = "wget", quiet = FALSE
)
言語処理100本ノック(2015年版)の「正規表現」の章をやってみました(「イギリス」以外の国名(エジプトやオーストラリアなど)でも試しましたが、適用可能かと思われます)。
Rで正規表現を扱うのは難しいのではないかと思いましたが、意外とできなくはないのかなという感想です(この先に深い闇が潜んでいそうですが)。
途中の処理でデータフレームを作るときにタグ名を指定していますが、dplyr::data_frame
やNSE版の各種関数でこなれた風に書けないものか、もう少し調べていきたいです(2列のデータフレームから、片方のカラムを名前属性に、もう片方のカラムを要素に持つベクトルを手軽に作成できると 25.の課題で嬉しい)。
Data frames, Non-standard evaluation
Webスクレイピングするパッケージには{rvest}があり、HTMLを読み込むhtml
という関数がありますが、下記のコミットにてこちらは非推奨になったようです。代わりにlibxml2ベースの{xml2}にあるread_html
を使って欲しいとのことで、今回はこちらを使用しました({rvest}のhtml
でも内部ではread_html
が呼ばれるように変更されました。ただし、これは0.4において削除するらしいです)
Use xml2 instead of XML.
JSONを扱うパッケージには{RJSONIO}がありましたが、{shiny}で{jsonlite}が使われるようになり、今後も{jsonlite}を使う機会が増えてきそうと考え、こちらを使っています。
Shiny 0.12: Interactive Plots with ggplot2
正規表現は考えるのがとても難しいです。
library(devtools)
devtools::session_info()
Session info --------------------------------------------------------------
setting value
version R version 3.2.0 (2015-04-16)
system x86_64, darwin13.4.0
ui X11
language (EN)
collate ja_JP.UTF-8
tz Asia/Tokyo
Packages ------------------------------------------------------------------
package * version date source
assertthat * 0.1 2013-12-06 CRAN (R 3.2.0)
curl * 0.5 2015-02-01 CRAN (R 3.2.0)
DBI * 0.3.1 2014-09-24 CRAN (R 3.2.0)
devtools 1.7.0 2015-01-17 CRAN (R 3.2.0)
digest * 0.6.8 2014-12-31 CRAN (R 3.2.0)
dplyr 0.4.2.9000 2015-06-17 Github (hadley/dplyr@7763150)
evaluate * 0.7 2015-04-21 CRAN (R 3.2.0)
formatR * 1.2 2015-04-21 CRAN (R 3.2.0)
htmltools * 0.2.6 2014-09-08 CRAN (R 3.2.0)
jsonlite 0.9.16 2015-04-11 CRAN (R 3.2.0)
knitr 1.10 2015-04-23 CRAN (R 3.2.0)
lazyeval * 0.1.10.9000 2015-06-07 Github (hadley/lazyeval@ecb8dc0)
magrittr * 1.5 2014-11-22 CRAN (R 3.2.0)
R6 * 2.0.1 2014-10-29 CRAN (R 3.2.0)
Rcpp * 0.11.6 2015-05-01 CRAN (R 3.2.0)
readr 0.1.0.9000 2015-06-08 Github (hadley/readr@9006822)
rmarkdown * 0.6.2.4 2015-06-07 Github (rstudio/rmarkdown@8c9e25b)
rstudioapi * 0.3.1 2015-04-07 CRAN (R 3.2.0)
stringi 0.4-1 2014-12-14 CRAN (R 3.2.0)
stringr 1.0.0 2015-04-30 CRAN (R 3.2.0)
xml2 0.1.0 2015-04-20 CRAN (R 3.2.0)
yaml * 2.1.13 2014-06-12 CRAN (R 3.2.0)