カテゴリー別アーカイブ: 研究

[R] mutateとacrossでデータの下処理を少しだけエレガントに

まえおき

私はdplyrは5年前くらいから使っていて,自分が扱うようなデータについて自分がやりたいことを(その表現方法のエレガントさは別として)表現することはできていました。ただ,近年dplyrはアップデートを重ねていました。昔覚えたやり方でやろうとしても,その関数は使えませんとか,その表記方法は違いますとか言われることが増えました。分析の下処理でやりたいことは基本的に研究が変わらないので同じです。よって,過去に自分が書いたスクリプトのコピペをすることが多いわけです。それができなくなっていたと。

特に,最近の更新でacross()という関数が導入されたことが変更として大きいなと思います。まだまだこのacross()に関する記事も少なかったので,自分が使うにあたって覚えたことをメモ代わりに書いておきます。ここでは,mutate関数と一緒に使うケースです。つまり,ある特定の列について,ある処理を施して,その処理を施した列をデータフレームに追加するという作業です。単純に列に対して処理を施すだけというのは結構記事があったんですが,列を追加することについては全部列挙するみたいな方法しか見つかりませんでした。そこでacross関数の出番というわけですね。

やりたいこと

例えば,今やってる研究のデータでは,データフレームの中に頻度のデータが入っています。これをログ変換したいとします。すると,これまでは以下のように書いていました。

log(dat$ColFreq)->dat$ColFreq_log #コロケーション頻度
log(dat$AdjFreq)->dat$AdjFreq_log #コロケーション内の形容詞の頻度
log(dat$NounFreq)->dat$NounFreq_log #コロケーション内の名詞の頻度
log(dat$MIScore)->dat$MIScore_log #Mutual Information Score

別にコピペ&書き換えみたいなことをしながらやればいいし,これでだめだってことはないんですけど,複数の列について

  1. 同じ関数を適用
  2. 列を追加する

という同じ動作をしているわけなので,これは一気にできたほうが応用可能性があがります。私は手作業でやるの無理みたいな列数のデータを扱うことはないんですが,もし仮にそういうデータを扱う場合には何十行も使うのは好ましくないし無駄な作業だといえます。そこで列に対して処理を施して追加するという機能があるmutate関数と,それを複数列に適用する際に便利なacross関数を組み合わせます。

やりかた

ちなみに,なんだかんだでdplyrのパッケージのPDFが一番わかりやすかったです(pp. 3-6のacross関数のセクションとpp. 43-46のmutate関数のセクション)。across関数の引数は,列(.cols),関数(.fns),追加する列の名前(.names)という3つの引数があります。よって,今回のケースで言えば列のところで頻度情報が入ってる列を選択し,関数はlogを選べばOKです。ただ,.namesがないと情報を上書きしてしまいます。.namesのところは手書きで全部列名指定してやらなかんのかと思いましたが,そんなことはありません。”{.col}”を使えば,もとの列名を使えます。これにあとは自分で好きなタグのようなものをつけてあげればいいですね。”{.fn}”というのも使えて,これは使った関数名が入ります。

ということで,以下のようにすれば頻度情報にログ変換して列追加という作業ができます。

dat%>%
  mutate(across(c(ColFreq, AdjFreq, NounFreq, MIScore),log,.names = "{.col}_log"))->dat

.namesの部分は”{.col}_log”としていますが,”{.col}_{.fn}”でも同じです。dat$ColFreq_log, dat$AdjFreq_log,dat$NounFreq_log,dat$MIScore_logという4つの列が追加されます。ちなみに,列指定の部分は列の数値(e.g., 1, 2)でも可能です。頻度の情報が5~8列目にあるなら,次のように書くこともできます。ある特定の文字列が含まれる列を選ぶcontains()関数starts_with()関数とかも使えるはずです(こういうのは調べれば結構例があります)。

dat%>%
  mutate(across(5:8,log,.names = "{.col}_log"))->dat

ちょっと応用

さて,mutate関数とacross関数でたいぶすっきりしたコードを書くことができました。そこでふと,私がもう一ついつも下処理で複数列に適用する作業を思い出しました。それは,変数の標準化です。いつもなら次のようにしてました。

dat$z.oqpt <-scale(dat$oqpt)[,1] #Oxford Placement Testの点数の中心化
dat$z.rating <-scale(dat$rating)[,1] #評定値の中心化

これも別に2行だけなので大したことないんですが,やってることは先ほどのログ変換と同じですので,これもmutate関数を使って書き直してみましょう。次のようになります。

dat%>%
  mutate(across(c(oqpt,rating),scale,.names = "z.{.col}"))->dat

これでうまくいっているようにも見えますが,実はscale関数って出力された結果がベクトルではありません(データ型を調べるとmatrix型なのがわかります)。よって,大抵の場合は分析に問題はありませんが,あとで(私の場合だと分析結果の図示とか)ベクトル形式が求められる関数に渡した際に問題が発生することがよくあります。データフレームをただ眺めるだけではそのことはわからないので,次のように工夫してあげる必要があります。

dat%>%
  mutate(across(c(oqpt,rating),~scale(.x)[,1],.names = "z.{.col}"))->dat

さきほどと関数部分の書き方が変わっているのがわかると思います。このように”~”をつける書記法はpurrr-styleと呼ばれるそうですが,これは一般的には関数内の引数を指定する場合によく用いられます。例えば,~mean(.x, na.rm=T) のように使います。”na.rm=T”は欠損値は外して関数を適用するという設定のようなものです。今回は引数の設定ではなく,~scale(.x)[,1]としています。”[,1]”とすることで,行列の1つ目の要素(つまりこれは標準化された数値のベクトル)だけを出力してくれます。ちなみに,この方法で.namesに{.fn}をつかって次のようにすると,出力される列名はoqpt_1, rating_1のようになりました(理由は不明)。

dat%>%
  mutate(across(c(oqpt,rating),~scale(.x)[,1],.names = "{.col}_{.fn}"))->dat

おわりに

というわけで,改良されているんだろうけれども前のやり方に慣れてるこっちからしたらアップデートたびにコードを書き換えるのまじで面倒…って思っていたのですが,調べてみるとやっぱり便利でしたというお話でした。

またこういう系のことで新しく覚えたことがあれば記事に書こうと思います。

なにをゆう たむらゆう。

おしまい。

【レビュー】タスク中のL1使用について

はじめに

超久しぶりに論文のレビュー記事。対象は以下の論文。メモ的なものです。

Xu, J., & Fan, Y. (2021). Task complexity, L2 proficiency and EFL learners’ L1 use in task-based peer interaction. Language Teaching Research, 13621688211004632. https://doi.org/10.1177/13621688211004633

概要

Task complexityの異なるinteractiveなタスクに取り組ませ,その中でのL1使用について,熟達度グループごとの比較をした研究です。上級グループでは複雑なタスクでL1の使用が増加しており,このL1使用はメタ認知的あるいは文法に関する会話の役割を担っていた。一方で,下級グループではそういった傾向は見られなかった。という話です。

本研究

RQ

  1. タスクの複雑さがL1使用に与える影響
  2. タスクの複雑さがL1使用に与える影響は熟達度によって異なるか
  3. タスクの複雑さはL1使用のどのような機能に影響を与えるか
  4. タスクの複雑さがL1使用の機能に与える影響は熟達度によって異なるか

参加者

  • 48人の中国語話者大学生
  • 大学一年生でレベルの違う2つの大学からリクルート(24ずつ)
  • レベルの高い方->high group, レベルの低い方-> low group

タスク

  • 複数コマのナレーションタスクで,Mr. Beanの動画の一部を10コマで表したものが2種類あって,それを二人で協力してナレーションするタイプの課題です(どっちの素材でもsimple/complexでやった)
  • 複雑さの操作
    • Robinsonのフレームワークの中で,+/- here and nowを選択
    • + here/now は絵を見ながら現在のこととして,-here/nowは写真を見ずに過去のこととしてという感じ(絵を見る時間は3分間でメモとかはなし)
    • expert ratingでも難しさの違いがあることは担保してる

手順

  • L1は使う必要があると感じたら使っても良いと言われている
  • within subject-designで同じ学習者が2つのタスクをやる

データコーディング

  • まずはL1の使用をコーディングして5つのカテゴリに分類
    – metacognitive talk(タスクのマネジメントなどについての発話)
    – grammar talk(文法について話す)
    – vocabulary talk(語彙について話す)
    – phatics(expressions such as ‘mmm, yeah, ok’みたいなものらしいです)
    – off-task talk(タスクとは直接関連しないもの)
  • L1使用の量については次の3つ
    • 全発話語のうちのL1の発話語
    • 全ターンのうちのL1のターン
    • predominant L1 turns(L2の語数と同じかそれよりもL1語数が多い)とminor L1 turnsに分類

結果

結果は以下の通り。

検定を何回もやるので有意水準を1%に設定
  • 語数とターンでは有意差あり(難しいほうがL1多め)
  • ただしpredominant L1 turnsでみると差はない
  • ただしSD広め
  • 一応RQ1はYES

熟達度別で見ると…

熟達度低いグループでは差がない->RQ2はYES

機能別では…


1%基準で有意なのはgrammarだけ


熟達度も入れてみてみると,高熟達度群でmetacognitive talkとgrammar talkだけsimple/complexの差が有意

議論

  • 以下の記述を見ると,そんなにL1使用が多かったとは著者たちは思ってないっぽい

Our results show that the participants did not use their shared L1 excessively, 27% in the simple tasks and 31% in the complex tasks. In other words, in spite of the fact that participants were allowed to use Chinese, students did not rely much on their L1,….

p.11
  • 先行研究よりは多かったということは言っているけど<-3割はさすがに多すぎでは?(今作っている教科書では,9割以上英語で話せたかというのを目安に自己評価をさせようということでいまのところやってます)
  • 意味中心のやりとりだとL1使用が多くなるとは言われているから,それが原因かも(Moore 2013, Tognini & Oliver 2012がそういうこと示したらしいけど,それどういうロジックなんだ?)<-読んでないです
  • more complex, more L1

熟達度に違いがあるL1使用例

論文中で会話のスクリプトが出てるんですがここでは要約だけ。

High group

  • complex task
    物語の詳細を描写しようとしたり,描写の質をあげるためにL1使ってる
  • simple task
    語彙を探しているときに使ってる

Low group

  • complex task
    – そもそも細かいとこまで描写しようとしてない
    – 過去形も使ってないし,それを修正しようともしない(low awareness towards linguistic forms)
  • simple task
    – こっちだと逆に細かいとこまで描写しようとする
    – でも能力的にそこまでできないのでL1を使う(主に語彙)
    – 結果的にどっちでもL1使用の量は変わらない

L1の機能

  • task management的な部分でL1使う(役割分担,どうやってナレーションするか,絵に含まれる情報,などについて話すときにL1使う)

なぜ高熟達度はL1使用多い?

  • 高熟達度群は,英語力にある程度自信があるので,より目標を高く設定して頑張ろうとする
  • その際にどうしたらうまくできるか試行錯誤する過程でL1が出てくるのではないか
  • 低熟達度群は,自分たちに自信がある内容自体とタスクを達成することに注力していた

感想

そもそも

complexなほうがL1多いと言うけれど,それはcomplexなタスクだからということではなく,学習者に与えるタスクとして(少なくともtaskを授業で使うという目的に照らして)間違っているということではないのかなというのが最初に思ったことです。機能をみたときにmetacognitive talkが他と比べてかなり多いというのは,タスクの進め方について十分な指示が与えられていなかったという解釈もできると思います。タスク遂行(今回であれば絵を描写すること)に必要なリソースは,タスク遂行についてのリソースとは異なるでしょう。pre-taskというとタスク遂行そのものへの準備に焦点がついつい向かってしまいますが,タスクをどう進めるかについても学習者はやり取りする必要が生じることはもっと認識されていいでしょう。そこでL1を使ってほしくないという思いがあるならば,task managementに必要な汎用性の高い表現は与えてしまって,それが使えるようにしてあげることはしても良いんじゃないかなと思います。そうでなければ,進め方を話し合わせなくてもタスクができるように具体的な指示を与えるべきでしょう。

そういったことまで含めて,大事なことはtask単体の複雑さどうこうの効果というよりも,授業の構成でそこをどうカバーするかだと思うし,授業の前後になにをやるかのほうがよっぽど授業内のL1使用に影響を与えるのではないかなと(それもtask complexityのmanipulationだと言われたらそうなんですけどね)。だとしたら,そうやっていろんな要因がある中で1つだけを取り上げてこういう形の研究やることって理論への貢献もあるのかないのかわからないし(いろんな要因の+/-を操作してL1の使用を調べた研究がたくさん集まったらメタ分析ですか?),実践の参考にもなりそうでそんなにならないですよね。

それタスクか?

あとは,ナレーションするタイプのタスクはいいとしてもそれを2人でやるっていうのは状況がかなり特殊だし,そもそもそれタスクとしてどうなん?という指摘もあると思います。インタラクティブなタスクをやらせるならもっとそれに適したタスクはあるはずだし,コマ使うなら10コマをバラバラに渡して,コマをストーリーの順番に並び替えるような情報合成型のタスクにすればよかったんじゃないかなとか思うところもあります。

もっと授業に関しての記述を

あとは,この論文は授業に関する記述が明らかに少なすぎだと思います。タスクをどう実施したかが5行だけです。通常の授業の中でやられたとは書かれていますが,そうだとしたら普段どのような授業をしているのか,授業と関連させているのか(授業の成績とは関係あるのかないのか),どういうビリーフの教師が普段教えているのか,等が決定的に重要ですし,実践に近いことをやるならそういうことを詳しく記述しなければ実践者が参照することも他の研究結果と比べることも難しいでしょう。実践に近いことをやればやるほどそういう要因で結果が容易に変動することは誰しもが想像できるわけですから。査読者もそういうのちゃんと指摘してほしいなと思います。

ペアの差の考慮

結果の表を見ると,SDがかなり広いですよね。だとしたら,それはペアで傾向がかなり異なっていることを示しているわけですから,こういうときこそマルチレベルの分析しないといけないんじゃないかなと思います。まああんまりテクニカルな分析に関しての指摘はしたくないので,あくまでsuggestionて感じですけど。

おわりに

面白そうかなと思って読んだら面白くなかったというオチでした。タスクのことは知識として持っておかないとなと思う一方で,こういう論文はそろそろ読むのがつらいです。

なにをゆう たむらゆう。

おしまい。

追記

Twitterで反応をもらったので追記します。やや複線化してますけど。

上のレビューでは先行研究のレビューの部分をがっつり端折ってしまっていますが,最初のイントロの部分で,インタラクション中のL1使用はL2 learningにポジティブなインパクトをもつという前提にいることを書いてはいます。

(前略)a growing body of research supports that students’ L1 use can be a social and cognitive tool (Alegría de la Colina & García Mayo, 2009; Antón & DiCamilla,1998; Storch & Aldosari, 2010; Thoms, Liao & Szustak, 2005). That is, judicious use of L1 can enhance L2 learning, giving full play to it as a mediating tool to analyse language and perform tasks. Specifically, L1 contributes to supporting peer interaction, helping learners’ negotiation of social identities and pro- moting the exchange of more meaningful and sophisticated ideas (Al Masaeed, 2016) (p.2)

で,このあとに,L1使用に影響を与える要因として熟達度があることを指摘し,それに加えてタスク要因もあるんじゃないかということで本研究がそこを見るよという流れですね。

ただ,そうであっても個人的にはタスクを用いる理由とその背後にある理論を考えれば,L2使用にこだわる理由があると考えるので上の「そもそも」に書いたようなことを思ったということになります。そういうバイアスで読んでいたので,「L1使ったからどうだっての?」という亘理先生の指摘は最もです。

とりあえず一旦ここまで。また加筆するかもしれないです(2021/04/28 19:15)。

J-SLA2020で共同発表します

Photo by Anna Tarazevich on Pexels.com

3月27-28日にオンライン開催される第20回 日本第二言語習得学会 国際年次大会(J-SLA2020)設立20周年記念大会で,共同研究の発表があります。

2020年度の終わりに,2020年度の初めての研究発表ということになりました。プログラム等の詳細は下記の大会のウェブページから閲覧できます。

第20回 日本第二言語習得学会 国際年次大会(J-SLA2020)設立20周年記念大会

発表の形式としては,発表自体はビデオ視聴で,質疑応答はzoomでリアルタイム実施ということになっています。参加するためには年会費の支払いが必要ですので,発表聞いてみようかなという方は会員登録をして頂く必要があります(参加費の徴収はありません)。

J-SLAはクレジットカードでの年会費納入もできます。詳しくは下記のページを御覧ください。2021年3月25日までに年会費を払わないと参加ができないようですので,ご注意ください。

入会・変更・問合わせ

私たちの発表は,27日の一番最終枠(17:10–17:45)で,17:10–17:30がビデオ視聴時間,7:30–17:45が質疑応答の時間となっています。

発表に関する情報は以下のとおりです。名古屋大学の後輩の寺井くんが第一著者の発表です。寺井くんは,彼がB4のときに,私個人あてに名大に進学を考えていると連絡してきたんですよね。それで,入学前に研究計画書を見たり,名古屋に彼が来て当時名大にいた他の院生と一緒に飲みに行ったりしたことがありました。残念ながら,私が関大に就職すると同時に名大の修士課程に入学したので,直接大学院で一緒だったわけではありません。ただ,それ以降も今回の発表メンバーの3人で毎週Skypeでゼミのようなことをやっていて,論文を読んだり,研究のアイデアを練ったりしていました。その中で出てきた研究のアイデアから生まれたのが今回の研究です。

正直言って寺井くんはまだまだ未熟なD生で,今回の研究発表に関してもアブストラクトも何回も修正のやりとりをしましたし,投影資料,発表のビデオについても何時間もかけて3人でやりとりしました。でも,彼は今後の名大を背負っていってほしい人材です(し実際に2022年度には彼が実質一番上になるはず)。学会発表や論文発表もいくつかしていると思いますが,J-SLAみたいな怖い人も結構来る学会での発表はないんじゃないかと思います。そういった意味でもここでしっかり発表をやりきってほしいなと(親心&プレッシャーをかける)。たくさんの方の参加をお待ちしています。よろしくお願いします。

タイトル

Learnability of L2 Collocation and L1 Activation in L2 Collocational Processing

発表者

Masato Terai (Nagoya University), Junya Fukuta (Chuo University), & Yu Tamura (Kansai University)

要旨

In the literature on L2 collocational processing, the influence of L1 activation has been subject to considerable discussion. Using an acceptability judgment task, this study assesses the effect of L1 activation in three different types of collocations: (a) English-only collocations that cannot be directly translated into Japanese (e.g., flat rate-??平らな割合), (b) congruent collocations (e.g., cold tea-冷たいお茶), (c) Japanized collocations (e.g., ??yellow voice-黄色い声援). The results indicated that L1 activation was evident regardless of both the proficiency level and the collocation types. The learners were more likely to accept collocations that they thought were easily translated into Japanese even for English-only collocations. Moreover, even highly-proficient Japanese learners of English did not properly reject the Japanized collocations, suggesting that those items are difficult to acquire without negative evidence that is not available in natural input.

【R】JSON形式で刺激リスト作成

はじめに

この記事では,よくある刺激のリストをJSON形式で保持するということをRを使ってやってみます。ただのデータフレームをJSON形式に変換するのはそれほど難しいことではありません。むしろ,Rを使わなくてもウェブ上で変換してくれるサービスがあります。
https://tableconvert.com/

こういうのを使うと,下記のようなテーブル形式のデータをcsvで持っていたとしたら,それをJSON形式に変換するのは一瞬です。

id name age gender
1 Roberta 39 M
2 Oliver 25 M
3 Shayna 18 F
4 Fechin 18 M
#JSON形式
[
    {"id":1,"name":"Roberta","age":39,"gender":"M"},
    {"id":2,"name":"Oliver","age":25,"gender":"M"},
    {"id":3,"name":"Shayna","age":18,"gender":"F"},
    {"id":4,"name":"Fechin","age":18,"gender":"M"}
]

問題の所在

じゃあ別にそのウェブサービスでいいじゃんということになるんですが,問題は少しこれより複雑です。というのも,私は今 jsPsychを使って実験ができるようにと勉強しています。jsPsychではJSON形式で刺激を読み込むのですが,その際に,データに階層性が必要になってくるようです。別に,反応の取得だけを目的とするなら必要ないのですが,のちのデータ分析を楽にすることを考えると,これは実験の前の段階でやっておきたいです1jsPsychのページでは以下のように例が示されています。

var test_stimuli = [
  { stimulus: "img/blue.png", data: {test_part: 'test', correct_response: 'f'}},
  { stimulus: "img/orange.png", data: {test_part: 'test', correct_response: 'j'}}
];

この例では,刺激として画像を提示するので,“stimulus”として画像ファイルが指定されています。そして,その後ろにdataという変数があって,要するに,実際に表示される刺激と,その刺激に付随する情報(正誤,刺激の種類等)が分かれていて,付随する情報は一つ階層が下のレベルに入っているということです。リストの中にリストがあるということですね。こうなると,ただのデータフレームからの変換というわけにはいかないので,先ほど紹介したようなウェブブラウザで変換というわけにもいきません。というわけで,Rを使って,できるだけ簡単にデータフレームから階層性のあるリストをゲットしましょう。というのが今回の目標です。実は,リスト->データフレームという話は,rlistパッケージ周りでやってる方が結構いらっしゃるようです(Googleで「rlist データフレーム 」と検索してみてください)。ところが,今回のようにデータフレーム->リストはあまり例が見つかりませんでした。ということでやってみましょう。結論から先にいうと,めちゃくちゃ単純でした。

1. データの準備

まずは,わかりやすい刺激リストの例として自分が最近実験で使った刺激リストを読み込みます。

dat<-read.csv("stimuli.csv")
head(dat)

一応,各列に何が入っているかを簡単にまとめると,以下のようになります。

  1. itemID: 刺激のID(かぶりがありますが,nonwordは分析から最初に外すのでとりあえずOK。ほんとは連番のがいいですけど)
  2. type: 刺激の種類
  3. word: ターゲットとなる英単語
  4. kana: 対応するカタカナ語
  5. pic: 提示する画像
  6. lang: 提示する言語
  7. prime: プライミング条件
  8. answer: 正答
  9. form: フォーム
  10. freq_J: カタカナ語の頻度
  11. freq_E: 英単語の頻度

この実験では,まずはじめに画像を提示して,参加者はその画像を見ます。画像を理解したら次に注視点が表示されます。その後に提示された文字列が実在語かどうかを判断する語彙性判断課題です。プライミングの条件がshare, spec, baseと3条件あります。さて,プログラム上では,

  1. 画像(pic)を提示
  2. 語(word)を提示

ということで,上で紹介した例と異なって,提示する刺激が2種類あります(ここでは,提示刺激は英単語のみとして進めます。カタカナ語の場合は英単語の部分をカタカナ語の列に置き換えれば良いと考えます)。つまり,

{ pic: "img/2_C_sh.jpg", word: "interview", data: {itemID: '2', kana: 'インタビュー', lang: 'eng', prime: 'share',answer: 'TRUE',form: 'A',freq_J: '29.5098', freq_E: '17.5744'}}

というのを読み込んだデータフレームのすべての行において作ることができれば成功となります。

2. パッケージの準備

とりあえず,これ入れとけばいいかなということでtidyverseパッケージと,最後にJSON形式に変換する際に使うjsonliteパッケージ。

install.packages("tidyverse")
install.packages("jsonlite")
library(tidyverse)
library(jsonlite)

3. データハンドリング

tibbleという比較的新しいデータ形式を使います。tidyrとかdplyrとか使うようになって,数年前からこのtibble形式がよく出てきてたんですが,私もいまいちよくわかってませんでした。というか,データフレームを扱うことがほとんどなので,データフレーム形式しか受け付けない関数にtibbleで出力された結果をうっかり渡してエラー吐くみたいなことが頻発したのでいちいちas.data.frame()でデータフレーム型に強制的に直すみたいなことをしてました。

ところが,今回みたいな階層性のある形については,tibble型が便利なようですね。tibbleでは,リスト型の列を持つことができるので,“data”の列に刺激の情報をまとめたリストを入れていけばいいということになります。そう考えて,次のようにやってみました。

tibble::tibble(
  pic=dat$pic,
  word=dat$word,
  data=list(dat[,c(1,2,4,6,7,8,9,10,11)])
)->dat2

ところが,これで中身を見てみると…

head(dat2)
## # A tibble: 6 x 3
##   pic         word        data             
##   <fct>       <fct>       <list>           
## 1 2_C_sh.jpg  interview   <df[,9] [48 × 9]>
## 2 3_C_sp.jpg  court       <df[,9] [48 × 9]>
## 3 6_C_sh.jpg  alien       <df[,9] [48 × 9]>
## 4 7_C_sp.jpg  appointment <df[,9] [48 × 9]>
## 5 10_C_sh.jpg stamp       <df[,9] [48 × 9]>
## 6 14_C_sh.jpg channel     <df[,9] [48 × 9]>
head(dat2$data,3)
## [[1]]
##    itemID    type               kana lang prime answer form   freq_J
## 1       2  target       インタビュー  eng share   TRUE    A  29.5098
## 2       3  target             コート  eng  spec   TRUE    A 100.7255
## 3       6  target         エイリアン  eng share   TRUE    A  17.4314
## 4       7  target   アポイントメント  eng  spec   TRUE    A  30.5686
## 5      10  target           スタンプ  eng share   TRUE    A   5.9216
## 6      14  target         チャンネル  eng share   TRUE    A  24.4118
## 7      15  target           クロール  eng  spec   TRUE    A  12.0392
## 8      18  target             センス  eng share   TRUE    A 131.8039
## 9      19  target             ベンチ  eng  spec   TRUE    A   9.6667
## 10     22  target     プロモーション  eng share   TRUE    A  10.9216
## 11     23  target               ツナ  eng  spec   TRUE    A   8.0000
## 12      1  target           アイロン  eng  base   TRUE    A  17.9412
## 13      4  target         グラウンド  eng  base   TRUE    A  72.4706
## 14      5  target           アドレス  eng  base   TRUE    A  52.2745
## 15      8  target       プレッシャー  eng  base   TRUE    A  53.1176
## 16      9  target         プロポーズ  eng  base   TRUE    A  13.0000
## 17     12  target         ボリューム  eng  base   TRUE    A   6.9412
## 18     13  target             ベース  eng  base   TRUE    A  35.3725
## 19     16  target       エクスプレス  eng  base   TRUE    A  17.9216
## 20     17  target           ストーブ  eng  base   TRUE    A   7.5882
## 21     20  target           リコール  eng  base   TRUE    A  19.6667
## 22     21  target             レター  eng  base   TRUE    A  82.6078
## 23     24  target             ガッツ  eng  base   TRUE    A  23.7451
## 24     25  target             バイク  eng  base   TRUE    A  25.8824
## 25     17 nonword     ドートレギング  eng  <NA>  FALSE <NA>       NA
## 26     18 nonword     フィスティレド  eng  <NA>  FALSE <NA>       NA
## 27     19 nonword       ストネヘンデ  eng  <NA>  FALSE <NA>       NA
## 28     20 nonword   ポリディフィエス  eng  <NA>  FALSE <NA>       NA
## 29     21 nonword   メストレイヤーズ  eng  <NA>  FALSE <NA>       NA
## 30     22 nonword         ドンスーン  eng  <NA>  FALSE <NA>       NA
## 31     23 nonword           スプラム  eng  <NA>  FALSE <NA>       NA
## 32     24 nonword ティソベディエント  eng  <NA>  FALSE <NA>       NA
## 33     25 nonword             ムイン  eng  <NA>  FALSE <NA>       NA
## 34     26 nonword           ドソーム  eng  <NA>  FALSE <NA>       NA
## 35     27 nonword             ヘイド  eng  <NA>  FALSE <NA>       NA
## 36     28 nonword         オンテナー  eng  <NA>  FALSE <NA>       NA
## 37     29 nonword         タンサック  eng  <NA>  FALSE <NA>       NA
## 38     30 nonword           フロール  eng  <NA>  FALSE <NA>       NA
## 39     31 nonword アンチヒスタモーネ  eng  <NA>  FALSE <NA>       NA
## 40     32 nonword         パラックス  eng  <NA>  FALSE <NA>       NA
## 41     33 nonword     ハイプノジスト  eng  <NA>  FALSE <NA>       NA
## 42     34 nonword       クロリエイジ  eng  <NA>  FALSE <NA>       NA
## 43     35 nonword         コラプソス  eng  <NA>  FALSE <NA>       NA
## 44     36 nonword             ビキナ  eng  <NA>  FALSE <NA>       NA
## 45     37 nonword スティメレーション  eng  <NA>  FALSE <NA>       NA
## 46     38 nonword         スキマッド  eng  <NA>  FALSE <NA>       NA
## 47     39 nonword     ディロクトネス  eng  <NA>  FALSE <NA>       NA
## 48     40 nonword         ケグファグ  eng  <NA>  FALSE <NA>       NA
##     freq_E
## 1  17.5744
## 2  21.4056
## 3   0.5272
## 4   0.5272
## 5   3.3743
## 6  20.8784
## 7   0.3163
## 8  11.7045
## 9  13.9541
## 10  2.4253
## 11  5.2020
## 12  3.6555
## 13  9.2793
## 14 31.5284
## 15  5.7292
## 16  2.2847
## 17 14.9382
## 18 40.7726
## 19  2.5307
## 20  3.5852
## 21  0.7030
## 22  3.5500
## 23  3.6906
## 24 13.8135
## 25      NA
## 26      NA
## 27      NA
## 28      NA
## 29      NA
## 30      NA
## 31      NA
## 32      NA
## 33      NA
## 34      NA
## 35      NA
## 36      NA
## 37      NA
## 38      NA
## 39      NA
## 40      NA
## 41      NA
## 42      NA
## 43      NA
## 44      NA
## 45      NA
## 46      NA
## 47      NA
## 48      NA
## 
## [[2]]
##    itemID    type               kana lang prime answer form   freq_J
## 1       2  target       インタビュー  eng share   TRUE    A  29.5098
## 2       3  target             コート  eng  spec   TRUE    A 100.7255
## 3       6  target         エイリアン  eng share   TRUE    A  17.4314
## 4       7  target   アポイントメント  eng  spec   TRUE    A  30.5686
## 5      10  target           スタンプ  eng share   TRUE    A   5.9216
## 6      14  target         チャンネル  eng share   TRUE    A  24.4118
## 7      15  target           クロール  eng  spec   TRUE    A  12.0392
## 8      18  target             センス  eng share   TRUE    A 131.8039
## 9      19  target             ベンチ  eng  spec   TRUE    A   9.6667
## 10     22  target     プロモーション  eng share   TRUE    A  10.9216
## 11     23  target               ツナ  eng  spec   TRUE    A   8.0000
## 12      1  target           アイロン  eng  base   TRUE    A  17.9412
## 13      4  target         グラウンド  eng  base   TRUE    A  72.4706
## 14      5  target           アドレス  eng  base   TRUE    A  52.2745
## 15      8  target       プレッシャー  eng  base   TRUE    A  53.1176
## 16      9  target         プロポーズ  eng  base   TRUE    A  13.0000
## 17     12  target         ボリューム  eng  base   TRUE    A   6.9412
## 18     13  target             ベース  eng  base   TRUE    A  35.3725
## 19     16  target       エクスプレス  eng  base   TRUE    A  17.9216
## 20     17  target           ストーブ  eng  base   TRUE    A   7.5882
## 21     20  target           リコール  eng  base   TRUE    A  19.6667
## 22     21  target             レター  eng  base   TRUE    A  82.6078
## 23     24  target             ガッツ  eng  base   TRUE    A  23.7451
## 24     25  target             バイク  eng  base   TRUE    A  25.8824
## 25     17 nonword     ドートレギング  eng  <NA>  FALSE <NA>       NA
## 26     18 nonword     フィスティレド  eng  <NA>  FALSE <NA>       NA
## 27     19 nonword       ストネヘンデ  eng  <NA>  FALSE <NA>       NA
## 28     20 nonword   ポリディフィエス  eng  <NA>  FALSE <NA>       NA
## 29     21 nonword   メストレイヤーズ  eng  <NA>  FALSE <NA>       NA
## 30     22 nonword         ドンスーン  eng  <NA>  FALSE <NA>       NA
## 31     23 nonword           スプラム  eng  <NA>  FALSE <NA>       NA
## 32     24 nonword ティソベディエント  eng  <NA>  FALSE <NA>       NA
## 33     25 nonword             ムイン  eng  <NA>  FALSE <NA>       NA
## 34     26 nonword           ドソーム  eng  <NA>  FALSE <NA>       NA
## 35     27 nonword             ヘイド  eng  <NA>  FALSE <NA>       NA
## 36     28 nonword         オンテナー  eng  <NA>  FALSE <NA>       NA
## 37     29 nonword         タンサック  eng  <NA>  FALSE <NA>       NA
## 38     30 nonword           フロール  eng  <NA>  FALSE <NA>       NA
## 39     31 nonword アンチヒスタモーネ  eng  <NA>  FALSE <NA>       NA
## 40     32 nonword         パラックス  eng  <NA>  FALSE <NA>       NA
## 41     33 nonword     ハイプノジスト  eng  <NA>  FALSE <NA>       NA
## 42     34 nonword       クロリエイジ  eng  <NA>  FALSE <NA>       NA
## 43     35 nonword         コラプソス  eng  <NA>  FALSE <NA>       NA
## 44     36 nonword             ビキナ  eng  <NA>  FALSE <NA>       NA
## 45     37 nonword スティメレーション  eng  <NA>  FALSE <NA>       NA
## 46     38 nonword         スキマッド  eng  <NA>  FALSE <NA>       NA
## 47     39 nonword     ディロクトネス  eng  <NA>  FALSE <NA>       NA
## 48     40 nonword         ケグファグ  eng  <NA>  FALSE <NA>       NA
##     freq_E
## 1  17.5744
## 2  21.4056
## 3   0.5272
## 4   0.5272
## 5   3.3743
## 6  20.8784
## 7   0.3163
## 8  11.7045
## 9  13.9541
## 10  2.4253
## 11  5.2020
## 12  3.6555
## 13  9.2793
## 14 31.5284
## 15  5.7292
## 16  2.2847
## 17 14.9382
## 18 40.7726
## 19  2.5307
## 20  3.5852
## 21  0.7030
## 22  3.5500
## 23  3.6906
## 24 13.8135
## 25      NA
## 26      NA
## 27      NA
## 28      NA
## 29      NA
## 30      NA
## 31      NA
## 32      NA
## 33      NA
## 34      NA
## 35      NA
## 36      NA
## 37      NA
## 38      NA
## 39      NA
## 40      NA
## 41      NA
## 42      NA
## 43      NA
## 44      NA
## 45      NA
## 46      NA
## 47      NA
## 48      NA
## 
## [[3]]
##    itemID    type               kana lang prime answer form   freq_J
## 1       2  target       インタビュー  eng share   TRUE    A  29.5098
## 2       3  target             コート  eng  spec   TRUE    A 100.7255
## 3       6  target         エイリアン  eng share   TRUE    A  17.4314
## 4       7  target   アポイントメント  eng  spec   TRUE    A  30.5686
## 5      10  target           スタンプ  eng share   TRUE    A   5.9216
## 6      14  target         チャンネル  eng share   TRUE    A  24.4118
## 7      15  target           クロール  eng  spec   TRUE    A  12.0392
## 8      18  target             センス  eng share   TRUE    A 131.8039
## 9      19  target             ベンチ  eng  spec   TRUE    A   9.6667
## 10     22  target     プロモーション  eng share   TRUE    A  10.9216
## 11     23  target               ツナ  eng  spec   TRUE    A   8.0000
## 12      1  target           アイロン  eng  base   TRUE    A  17.9412
## 13      4  target         グラウンド  eng  base   TRUE    A  72.4706
## 14      5  target           アドレス  eng  base   TRUE    A  52.2745
## 15      8  target       プレッシャー  eng  base   TRUE    A  53.1176
## 16      9  target         プロポーズ  eng  base   TRUE    A  13.0000
## 17     12  target         ボリューム  eng  base   TRUE    A   6.9412
## 18     13  target             ベース  eng  base   TRUE    A  35.3725
## 19     16  target       エクスプレス  eng  base   TRUE    A  17.9216
## 20     17  target           ストーブ  eng  base   TRUE    A   7.5882
## 21     20  target           リコール  eng  base   TRUE    A  19.6667
## 22     21  target             レター  eng  base   TRUE    A  82.6078
## 23     24  target             ガッツ  eng  base   TRUE    A  23.7451
## 24     25  target             バイク  eng  base   TRUE    A  25.8824
## 25     17 nonword     ドートレギング  eng  <NA>  FALSE <NA>       NA
## 26     18 nonword     フィスティレド  eng  <NA>  FALSE <NA>       NA
## 27     19 nonword       ストネヘンデ  eng  <NA>  FALSE <NA>       NA
## 28     20 nonword   ポリディフィエス  eng  <NA>  FALSE <NA>       NA
## 29     21 nonword   メストレイヤーズ  eng  <NA>  FALSE <NA>       NA
## 30     22 nonword         ドンスーン  eng  <NA>  FALSE <NA>       NA
## 31     23 nonword           スプラム  eng  <NA>  FALSE <NA>       NA
## 32     24 nonword ティソベディエント  eng  <NA>  FALSE <NA>       NA
## 33     25 nonword             ムイン  eng  <NA>  FALSE <NA>       NA
## 34     26 nonword           ドソーム  eng  <NA>  FALSE <NA>       NA
## 35     27 nonword             ヘイド  eng  <NA>  FALSE <NA>       NA
## 36     28 nonword         オンテナー  eng  <NA>  FALSE <NA>       NA
## 37     29 nonword         タンサック  eng  <NA>  FALSE <NA>       NA
## 38     30 nonword           フロール  eng  <NA>  FALSE <NA>       NA
## 39     31 nonword アンチヒスタモーネ  eng  <NA>  FALSE <NA>       NA
## 40     32 nonword         パラックス  eng  <NA>  FALSE <NA>       NA
## 41     33 nonword     ハイプノジスト  eng  <NA>  FALSE <NA>       NA
## 42     34 nonword       クロリエイジ  eng  <NA>  FALSE <NA>       NA
## 43     35 nonword         コラプソス  eng  <NA>  FALSE <NA>       NA
## 44     36 nonword             ビキナ  eng  <NA>  FALSE <NA>       NA
## 45     37 nonword スティメレーション  eng  <NA>  FALSE <NA>       NA
## 46     38 nonword         スキマッド  eng  <NA>  FALSE <NA>       NA
## 47     39 nonword     ディロクトネス  eng  <NA>  FALSE <NA>       NA
## 48     40 nonword         ケグファグ  eng  <NA>  FALSE <NA>       NA
##     freq_E
## 1  17.5744
## 2  21.4056
## 3   0.5272
## 4   0.5272
## 5   3.3743
## 6  20.8784
## 7   0.3163
## 8  11.7045
## 9  13.9541
## 10  2.4253
## 11  5.2020
## 12  3.6555
## 13  9.2793
## 14 31.5284
## 15  5.7292
## 16  2.2847
## 17 14.9382
## 18 40.7726
## 19  2.5307
## 20  3.5852
## 21  0.7030
## 22  3.5500
## 23  3.6906
## 24 13.8135
## 25      NA
## 26      NA
## 27      NA
## 28      NA
## 29      NA
## 30      NA
## 31      NA
## 32      NA
## 33      NA
## 34      NA
## 35      NA
## 36      NA
## 37      NA
## 38      NA
## 39      NA
## 40      NA
## 41      NA
## 42      NA
## 43      NA
## 44      NA
## 45      NA
## 46      NA
## 47      NA
## 48      NA

このように,各行にすべての情報が入ってしまいます。よって,行ごとに入れることを考えないといけません。これを一発できれいにできたらかっこいいんですが,思いつかなかったので,とりあえずfor関数でi行目を取り出してtibbleに入れる,を繰り返すことにしました。まずは,dataのところがリスト型になるようにtibbleを作ります。

tibble::tibble(
  pic=dat$pic,
  word=dat$word,
  data=list()
)->dat3
head(dat3)

しかしここでもまた失敗。dataの列の長さがあってないと怒られてしまいます。これを解決するためにlistの中に空のリストを入れます(正直ここで入れる要素はなんでもOK)。

tibble::tibble(
  pic=dat$pic,
  word=dat$word,
  data=list(list())
)->dat3
dat3
## # A tibble: 48 x 3
##    pic         word        data      
##    <fct>       <fct>       <list>    
##  1 2_C_sh.jpg  interview   <list [0]>
##  2 3_C_sp.jpg  court       <list [0]>
##  3 6_C_sh.jpg  alien       <list [0]>
##  4 7_C_sp.jpg  appointment <list [0]>
##  5 10_C_sh.jpg stamp       <list [0]>
##  6 14_C_sh.jpg channel     <list [0]>
##  7 15_C_sp.jpg crawl       <list [0]>
##  8 18_C_sh.jpg sense       <list [0]>
##  9 19_C_sp.jpg bench       <list [0]>
## 10 22_C_sh.jpg promotion   <list [0]>
## # … with 38 more rows

できあがった dat3 という変数の“data”列に,pic( dat の5列目)とword( dat の3列目)を除いたものを1行目から順にとってきてlistにして,それを dat3 の“data”列に順番にいれていきます。

for (i in 1:length(dat3$pic)){
  dat3[i,3][[1]]<-list(dat[i,c(1,2,4,6,7,8,9,10,11)])
}
head(dat3)
## # A tibble: 6 x 3
##   pic         word        data            
##   <fct>       <fct>       <list>          
## 1 2_C_sh.jpg  interview   <df[,9] [1 × 9]>
## 2 3_C_sp.jpg  court       <df[,9] [1 × 9]>
## 3 6_C_sh.jpg  alien       <df[,9] [1 × 9]>
## 4 7_C_sp.jpg  appointment <df[,9] [1 × 9]>
## 5 10_C_sh.jpg stamp       <df[,9] [1 × 9]>
## 6 14_C_sh.jpg channel     <df[,9] [1 × 9]>

こうすると,できあがったtibbleのdata列には1行目から順に,interview, court,…の刺激の情報が入ることになります。確認のために見てみましょう。

dat3$data[[1]];dat3$data[[2]]
##   itemID   type         kana lang prime answer form  freq_J  freq_E
## 1      2 target インタビュー  eng share   TRUE    A 29.5098 17.5744
##   itemID   type   kana lang prime answer form   freq_J  freq_E
## 2      3 target コート  eng  spec   TRUE    A 100.7255 21.4056

ちゃんと入ってますね。最後に,このtibbleをJSON形式に変換すれば完成です。

toJSON(dat3)
## [{"pic":"2_C_sh.jpg","word":"interview","data":[{"itemID":2,"type":"target","kana":"インタビュー","lang":"eng","prime":"share","answer":true,"form":"A","freq_J":29.5098,"freq_E":17.5744}]},{"pic":"3_C_sp.jpg","word":"court","data":[{"itemID":3,"type":"target","kana":"コート","lang":"eng","prime":"spec","answer":true,"form":"A","freq_J":100.7255,"freq_E":21.4056}]},{"pic":"6_C_sh.jpg","word":"alien","data":[{"itemID":6,"type":"target","kana":"エイリアン","lang":"eng","prime":"share","answer":true,"form":"A","freq_J":17.4314,"freq_E":0.5272}]},{"pic":"7_C_sp.jpg","word":"appointment","data":[{"itemID":7,"type":"target","kana":"アポイントメント","lang":"eng","prime":"spec","answer":true,"form":"A","freq_J":30.5686,"freq_E":0.5272}]},{"pic":"10_C_sh.jpg","word":"stamp","data":[{"itemID":10,"type":"target","kana":"スタンプ","lang":"eng","prime":"share","answer":true,"form":"A","freq_J":5.9216,"freq_E":3.3743}]},{"pic":"14_C_sh.jpg","word":"channel","data":[{"itemID":14,"type":"target","kana":"チャンネル","lang":"eng","prime":"share","answer":true,"form":"A","freq_J":24.4118,"freq_E":20.8784}]},{"pic":"15_C_sp.jpg","word":"crawl","data":[{"itemID":15,"type":"target","kana":"クロール","lang":"eng","prime":"spec","answer":true,"form":"A","freq_J":12.0392,"freq_E":0.3163}]},{"pic":"18_C_sh.jpg","word":"sense","data":[{"itemID":18,"type":"target","kana":"センス","lang":"eng","prime":"share","answer":true,"form":"A","freq_J":131.8039,"freq_E":11.7045}]},{"pic":"19_C_sp.jpg","word":"bench","data":[{"itemID":19,"type":"target","kana":"ベンチ","lang":"eng","prime":"spec","answer":true,"form":"A","freq_J":9.6667,"freq_E":13.9541}]},{"pic":"22_C_sh.jpg","word":"promotion","data":[{"itemID":22,"type":"target","kana":"プロモーション","lang":"eng","prime":"share","answer":true,"form":"A","freq_J":10.9216,"freq_E":2.4253}]},{"pic":"23_C_sp.jpg","word":"tuna","data":[{"itemID":23,"type":"target","kana":"ツナ","lang":"eng","prime":"spec","answer":true,"form":"A","freq_J":8,"freq_E":5.202}]},{"pic":"1_C_b.jpg","word":"iron","data":[{"itemID":1,"type":"target","kana":"アイロン","lang":"eng","prime":"base","answer":true,"form":"A","freq_J":17.9412,"freq_E":3.6555}]},{"pic":"4_C_b.jpg","word":"ground","data":[{"itemID":4,"type":"target","kana":"グラウンド","lang":"eng","prime":"base","answer":true,"form":"A","freq_J":72.4706,"freq_E":9.2793}]},{"pic":"5_C_b.jpg","word":"address","data":[{"itemID":5,"type":"target","kana":"アドレス","lang":"eng","prime":"base","answer":true,"form":"A","freq_J":52.2745,"freq_E":31.5284}]},{"pic":"8_C_b.jpg","word":"pressure","data":[{"itemID":8,"type":"target","kana":"プレッシャー","lang":"eng","prime":"base","answer":true,"form":"A","freq_J":53.1176,"freq_E":5.7292}]},{"pic":"9_C_b.jpg","word":"propose","data":[{"itemID":9,"type":"target","kana":"プロポーズ","lang":"eng","prime":"base","answer":true,"form":"A","freq_J":13,"freq_E":2.2847}]},{"pic":"12_C_b.jpg","word":"volume","data":[{"itemID":12,"type":"target","kana":"ボリューム","lang":"eng","prime":"base","answer":true,"form":"A","freq_J":6.9412,"freq_E":14.9382}]},{"pic":"13_C_b.jpg","word":"base","data":[{"itemID":13,"type":"target","kana":"ベース","lang":"eng","prime":"base","answer":true,"form":"A","freq_J":35.3725,"freq_E":40.7726}]},{"pic":"16_C_b.jpg","word":"express","data":[{"itemID":16,"type":"target","kana":"エクスプレス","lang":"eng","prime":"base","answer":true,"form":"A","freq_J":17.9216,"freq_E":2.5307}]},{"pic":"17_C_b.jpg","word":"stove","data":[{"itemID":17,"type":"target","kana":"ストーブ","lang":"eng","prime":"base","answer":true,"form":"A","freq_J":7.5882,"freq_E":3.5852}]},{"pic":"20_C_b.jpg","word":"recall","data":[{"itemID":20,"type":"target","kana":"リコール","lang":"eng","prime":"base","answer":true,"form":"A","freq_J":19.6667,"freq_E":0.703}]},{"pic":"21_C_b.jpg","word":"letter","data":[{"itemID":21,"type":"target","kana":"レター","lang":"eng","prime":"base","answer":true,"form":"A","freq_J":82.6078,"freq_E":3.55}]},{"pic":"24_C_b.jpg","word":"guts","data":[{"itemID":24,"type":"target","kana":"ガッツ","lang":"eng","prime":"base","answer":true,"form":"A","freq_J":23.7451,"freq_E":3.6906}]},{"pic":"25_C_b.jpg","word":"bike","data":[{"itemID":25,"type":"target","kana":"バイク","lang":"eng","prime":"base","answer":true,"form":"A","freq_J":25.8824,"freq_E":13.8135}]},{"pic":"17_n.jpg","word":"dootlegging","data":[{"itemID":17,"type":"nonword","kana":"ドートレギング","lang":"eng","answer":false}]},{"pic":"18_n.jpg","word":"fistilled","data":[{"itemID":18,"type":"nonword","kana":"フィスティレド","lang":"eng","answer":false}]},{"pic":"19_n.jpg","word":"stonehende","data":[{"itemID":19,"type":"nonword","kana":"ストネヘンデ","lang":"eng","answer":false}]},{"pic":"20_n.jpg","word":"polidifies","data":[{"itemID":20,"type":"nonword","kana":"ポリディフィエス","lang":"eng","answer":false}]},{"pic":"21_n.jpg","word":"mestroyers","data":[{"itemID":21,"type":"nonword","kana":"メストレイヤーズ","lang":"eng","answer":false}]},{"pic":"22_n.jpg","word":"donsoon","data":[{"itemID":22,"type":"nonword","kana":"ドンスーン","lang":"eng","answer":false}]},{"pic":"23_n.jpg","word":"splum","data":[{"itemID":23,"type":"nonword","kana":"スプラム","lang":"eng","answer":false}]},{"pic":"24_n.jpg","word":"tisobedient","data":[{"itemID":24,"type":"nonword","kana":"ティソベディエント","lang":"eng","answer":false}]},{"pic":"25_n.jpg","word":"muin","data":[{"itemID":25,"type":"nonword","kana":"ムイン","lang":"eng","answer":false}]},{"pic":"26_n.jpg","word":"dothorme","data":[{"itemID":26,"type":"nonword","kana":"ドソーム","lang":"eng","answer":false}]},{"pic":"27_n.jpg","word":"hade","data":[{"itemID":27,"type":"nonword","kana":"ヘイド","lang":"eng","answer":false}]},{"pic":"28_n.jpg","word":"ontener","data":[{"itemID":28,"type":"nonword","kana":"オンテナー","lang":"eng","answer":false}]},{"pic":"29_n.jpg","word":"tansack","data":[{"itemID":29,"type":"nonword","kana":"タンサック","lang":"eng","answer":false}]},{"pic":"30_n.jpg","word":"frool","data":[{"itemID":30,"type":"nonword","kana":"フロール","lang":"eng","answer":false}]},{"pic":"31_n.jpg","word":"antihistamone","data":[{"itemID":31,"type":"nonword","kana":"アンチヒスタモーネ","lang":"eng","answer":false}]},{"pic":"32_n.jpg","word":"parracks","data":[{"itemID":32,"type":"nonword","kana":"パラックス","lang":"eng","answer":false}]},{"pic":"33_n.jpg","word":"hypnojist","data":[{"itemID":33,"type":"nonword","kana":"ハイプノジスト","lang":"eng","answer":false}]},{"pic":"34_n.jpg","word":"croilage","data":[{"itemID":34,"type":"nonword","kana":"クロリエイジ","lang":"eng","answer":false}]},{"pic":"35_n.jpg","word":"collapsos","data":[{"itemID":35,"type":"nonword","kana":"コラプソス","lang":"eng","answer":false}]},{"pic":"36_n.jpg","word":"bikina","data":[{"itemID":36,"type":"nonword","kana":"ビキナ","lang":"eng","answer":false}]},{"pic":"37_n.jpg","word":"stimelation","data":[{"itemID":37,"type":"nonword","kana":"スティメレーション","lang":"eng","answer":false}]},{"pic":"38_n.jpg","word":"skimmud","data":[{"itemID":38,"type":"nonword","kana":"スキマッド","lang":"eng","answer":false}]},{"pic":"39_n.jpg","word":"diroctness","data":[{"itemID":39,"type":"nonword","kana":"ディロクトネス","lang":"eng","answer":false}]},{"pic":"40_n.jpg","word":"kegfug","data":[{"itemID":40,"type":"nonword","kana":"ケグファグ","lang":"eng","answer":false}]}]

テキストファイルとして保存する場合は,以下のようにします。

toJSON(dat3) %>%
write(.,file = "json.txt")

おわりに

この記事では,データフレーム形式のものを階層性をもった形でJSON形式に変換するということをやってみました。tibbleという形式ができたことで,データフレームの中にリスト型変数を持つということができます。これができれば,あとは toJSON関数 で一発で変換ができました。もしかしたらもっとエレガントな方法もあるかもしれませんが,とりあえず現状の課題は解決できました。

なにをゆう たむらゆう。

おしまい。


  1. 注: 私はこれまで,大学院で習ったHot Soup Processorというゲームを作る目的で使われることが多いプログラミング言語を使って実験プログラムを作っていました。その際にも,特にRでのデータハンドリングに習熟するようになってからは,刺激を読み込む際に,その刺激の情報も一緒に読み込んで,実験結果の出力時にロング型で表示されるようにしていました。

【R】カタカナの非語を自動生成する

はじめに

実験に使うために作ったのですが,結局ボツになったので,どうやってカタカナの非語を作成しようとしたのかの方法をブログの記事に書くことで成仏させたいと思います。考え方は簡単で,カタカナ語の含まれる変数と,任意の数字が入った変数を作って,後者の変数から任意に1つの数字を選び出し,その数だけカタカナ語のリストから任意に取ってきてくっつける,という感じです。よって,生成される文字列は日本語らしさとかはまったく無視されたものになります(まれに日本語っぽいものや完全に日本語のものもできますランダムなので)。

カタカナのリストを用意

まずはカタカナのリストを作ります。アルファベットとかは簡単なんですが,カタカナのリストがRのデフォルトにはない(たぶん)ので,自分で用意します。ただ,50音の表だと扱いづらいので,カタカナを縦にガーッと並んだものをコピーできたら便利だなと思っていたら,そんなサイトがありました。

http://desilysis.seesaa.net/article/423176853.html

ここにあるものをコピーして,kanaという変数に入れます。ちなみに,この記事で使う「リスト」は一般的な意味で,Rにおける「リスト型」という意味のリストではありませんのでご注意ください。

kana <-read.table("clipboard") #Windows
kana <-read.table(pipe("pbpaste")) #Mac
print(kana)


すると,こんな感じでカタカナが入った変数が手に入ります。read.tableで読み込んでるのでデータフレームになります。濁音と半濁音が抜いてあります。入れてもいいのですが,入れるとそれっぽいカタカナ語が生成されづらくなるというのが理由です。

##    V1
## 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 ハ
## 27 ヒ
## 28 フ
## 29 ヘ
## 30 ホ
## 31 マ
## 32 ミ
## 33 ム
## 34 メ
## 35 モ
## 36 ヤ
## 37 ユ
## 38 ヨ
## 39 ラ
## 40 リ
## 41 ル
## 42 レ
## 43 ロ
## 44 ワ
## 45 ヲ
## 46 ン

任意の数字のリストを作る

次に,任意の数字のリストを作ります。もしも,4文字の非語だけで良いというような場合はこの作業はスキップしてもらってOKです。ここでは,3文字から8文字の非語を作ることにします。

kazu <-c(3:8)
print(kazu)
## [1] 3 4 5 6 7 8

これで2つの道具が揃ったので,あとはこの2つを組み合わせるだけです。

カタカナをランダムに組み合わせる

非語をいれるハコを用意

まず,できあがった非語を入れるためのハコを用意します。ここでは,100個作ることにしましょう。 nonword という列に,0を100個いれてます。

dat<- data.frame(nonword=rep(0,100))
print(dat)
##     nonword
## 1         0
## 2         0
## 3         0
## 4         0
## 5         0
## 6         0
## 7         0
## 8         0
## 9         0
## 10        0
## 11        0
## 12        0
## 13        0
## 14        0
## 15        0
## 16        0
## 17        0
## 18        0
## 19        0
## 20        0
## 21        0
## 22        0
## 23        0
## 24        0
## 25        0
## 26        0
## 27        0
## 28        0
## 29        0
## 30        0
## 31        0
## 32        0
## 33        0
## 34        0
## 35        0
## 36        0
## 37        0
## 38        0
## 39        0
## 40        0
## 41        0
## 42        0
## 43        0
## 44        0
## 45        0
## 46        0
## 47        0
## 48        0
## 49        0
## 50        0
## 51        0
## 52        0
## 53        0
## 54        0
## 55        0
## 56        0
## 57        0
## 58        0
## 59        0
## 60        0
## 61        0
## 62        0
## 63        0
## 64        0
## 65        0
## 66        0
## 67        0
## 68        0
## 69        0
## 70        0
## 71        0
## 72        0
## 73        0
## 74        0
## 75        0
## 76        0
## 77        0
## 78        0
## 79        0
## 80        0
## 81        0
## 82        0
## 83        0
## 84        0
## 85        0
## 86        0
## 87        0
## 88        0
## 89        0
## 90        0
## 91        0
## 92        0
## 93        0
## 94        0
## 95        0
## 96        0
## 97        0
## 98        0
## 99        0
## 100       0

forで繰り返す

では,for文を使って,1行目から100行目まで順番に非語をぶちこんでいきます。sample関数は,次のような引数をとります。

sample(x,size,replace=FALSE,prob=NULL)

  • x ->無作為抽出元のベクトル
  • size ->無作為抽出で何個とってくるか
  • replace ->重複ありでとってくるか(同じものが2回でてもいいかどうか)
  • prob ->xの要素が抽出される確率

ここではprobは特にこだわらなくてOKですね。重複はなしでいってみましょう。xはkanaでsizeは3~8がランダムに出てほしいので,ここにもsample関数を使いましょう。つまり,kazuという変数から任意に1つ選んで,その数字の長さの非語を作ろうということです。3がでたなら3文字,7が出たなら7文字ということです。ここを固定した数字にすれば,その文字数の非語のみができます。ということで,以下のような感じで走らせます。

for (i in 1:100){
    dat[i,]<-   paste(as.character(sample(kana[,1],sample(kazu,1))),sep="",collapse="")
    }


kanaというデータフレームの1列目から,kazu(3~8)から選ばれた任意の数字の数だけ要素を無作為に選んできて,paste関数で合体させるということですね。一応,paste関数の中でas.character関数を使って文字列の扱いを指定してますが,なくてもたぶん動くかなと思います。

##              nonword
## 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            ルヨモ
## 27      トンルフヌロ
## 28        エロスヨフ
## 29  レテキアタホロハ
## 30      キリナコロヘ
## 31          アキタル
## 32        キニユミイ
## 33        トムテルネ
## 34      ホンタヨヌイ
## 35          セエシト
## 36        キテチハソ
## 37        ヌソハチエ
## 38            ヨヒマ
## 39          ハモクシ
## 40    カオトヌリフキ
## 41      ホヨオトカリ
## 42          ヤヌホト
## 43      メクユイソテ
## 44  カフトルムリレマ
## 45        ヤチツテシ
## 46            シヌメ
## 47  ムアコチワノウネ
## 48  ヲリノイヒフウミ
## 49      サムヤトシラ
## 50            ユミケ
## 51        レカフヤン
## 52      ミノリヤタホ
## 53            ツケイ
## 54  ニロネウモトソナ
## 55        レセシノラ
## 56          コヌメニ
## 57          ツユニン
## 58            クトス
## 59          スツヌリ
## 60    メユマヲウチロ
## 61            ネヨタ
## 62      ヤハケミソセ
## 63            リチキ
## 64            ハネマ
## 65          ツノウタ
## 66        ヌツセアラ
## 67          ヘサキウ
## 68      タセルユヲチ
## 69      カンシナテヨ
## 70      ラロモオヲノ
## 71  ホムニヨイリンク
## 72      トロイアネツ
## 73    ケモレクメトア
## 74            ミカセ
## 75          スホアセ
## 76  ラルマノヤキユテ
## 77      ニチノマヤイ
## 78            ワリサ
## 79      ヤラヲスソム
## 80      タトクンシア
## 81      ニフシユトヒ
## 82      トメマケヤオ
## 83        オリクツル
## 84  ラリオホメヘモシ
## 85            オヌエ
## 86        トサヌンス
## 87            ワオウ
## 88        ヒラキメノ
## 89    サエアカラハメ
## 90      ネフミナモワ
## 91            サヤフ
## 92        クヤヨイナ
## 93  コキソユクホマノ
## 94            メムヌ
## 95      オヲユカスン
## 96          ケヌニタ
## 97    ユキラチヨネテ
## 98          ヒレニエ
## 99    メワセモオネク
## 100     ヤタセンノウ


サカフヌとかテユヨマクトとかわけわからないのがたくさんできてますね。もしも,4文字の非語だけで良いということであれば,

for (i in 1:100){
    dat2[i,]<-  paste(as.character(sample(kana[,1],4)),sep="",collapse="")
}


のように, sample(kazu,1) の部分を任意の数字に入れ替えてあげることになります。そうすれば,4文字だけの非語リストが手に入ります。

dat2<- data.frame(nonword=rep(0,100))
for (i in 1:100){
    dat2[i,]<-  paste(as.character(sample(kana[,1],4)),sep="",collapse="")
}
print(dat2)
##      nonword
## 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  ハフソト
## 27  ヨスクヌ
## 28  サスキホ
## 29  ヨワツノ
## 30  イトセム
## 31  オセンエ
## 32  ホミレル
## 33  リラハフ
## 34  ツラソカ
## 35  テチサシ
## 36  ツヲヌヒ
## 37  ヲタカム
## 38  ハアワレ
## 39  オクネケ
## 40  ミムルヤ
## 41  ヘテロホ
## 42  アサヤケ
## 43  チヤラウ
## 44  クハサケ
## 45  ンテリム
## 46  メネサム
## 47  マシトリ
## 48  クヌワマ
## 49  ナヤリロ
## 50  ナヤウン
## 51  タンナレ
## 52  メヘオテ
## 53  ソキヨニ
## 54  ソユヘタ
## 55  ルサスノ
## 56  ネウフセ
## 57  ムメシヒ
## 58  ネシムセ
## 59  ケヘシノ
## 60  ヒケルメ
## 61  メンタモ
## 62  エケチコ
## 63  ニチシヤ
## 64  テルメキ
## 65  モツロイ
## 66  エレサセ
## 67  ンスイハ
## 68  アモチセ
## 69  ノヤミネ
## 70  ヨストカ
## 71  ニヒラン
## 72  リノシナ
## 73  ハタヘス
## 74  メオヘセ
## 75  エヘミロ
## 76  トソテマ
## 77  ネイトフ
## 78  スイツヲ
## 79  カセレム
## 80  ツウコユ
## 81  ヤムニネ
## 82  サメネン
## 83  シテフケ
## 84  セロヲヌ
## 85  マシスエ
## 86  オンヤナ
## 87  トルキエ
## 88  ソヘトヌ
## 89  ヒカクニ
## 90  クケコツ
## 91  ヌリルホ
## 92  トサセリ
## 93  コロツム
## 94  ホリトク
## 95  モヲネヘ
## 96  ケシヨフ
## 97  テレメヘ
## 98  ナハヲモ
## 99  オレトル
## 100 レノケマ

おわりに

この記事では,Rを使ってカタカナの非語をランダムに生成するということをやってみました。いつか誰かの役に立ちますように。

なにをゆう たむらゆう。

おしまい。

余談

実は,以前RmarkdownからWordpressに直接流し込む方法という記事を書いていて,その方法を使ってRmarkdownで書いたものをブログ記事にしようとしました。ところが,knit2wp関数がうまくいってないのかエラーが出てしまって,結局うまく行きませんでした。これのために時間溶かすのもなんだかなと思ったので,HTMLで書き出して,それをテキストエディタで開いたものをコピペしてこの記事をつくりました(トホホ

ライティングにおいて文の数を制限するとどうなるか

はじめに

下記のanf先生のブログ読んで考えたことを書きます。今まであまり深く考えたことがなかったんですが,以前に自分が関わった研究と,高校ライティングの入試問題の形式って,直接的ではありませんが,つながるところがあるかもしれないなという話です。

2020年度埼玉県公立高校入試問題のライティング問題から読み取るメッセージ

ライティング問題における文の数の指定

上の記事中の中では埼玉県公立高校入試でのライティング問題で文の数の指定が近年では5文以上となっていたものが,今年度は3文以上という指定になったという話があります(それだけがメインじゃないんですけど)。一見すると,書かなければいけない文の数が減るというのは要するに求められる分量が減ったと捉えられると思います。ちょっと別の角度から文の数の指定を考えてみたら面白いかもしれないということを以下で考察してみたいと思います。

文の数の上限をつくるという発想

あくまで,入試問題での指定は,「◯文以上で」という最低ラインを示しているものです。つまり,3文はいいけど2文ではいけないと。これも「制限」ですが,文の数の制限は別のやり方もあります。それは,上限を設けるということです。文の数の下限を設けるというのは,ある一定以上の流暢さ(ここでは入試という限られた時間内である程度の分量が書けること)を求めているというメッセージになると思います。

一方で,同じ内容を表現するにあたって文の数の上限をつけるとどのようなメッセージになるでしょうか。これは1文の中にどれだけ節(または句)を埋め込めるのか,つまり,どれだけ複雑な文が書けるのかを見ますよというメッセージになるでしょう。もちろん,意識的に節を増やそうと考えることを求めているわけではありません。ただ,伝える内容が同じ時,文の数が減るというのは1文の統語的複雑さ(簡単に言うと1文に含まれる節の数が多いことや1文に含まれる語数が多いこと)が必然的に(そして意識するかは別として)あがることが見込まれます。

本当に節は増えるのか?

以前,大学生・大学院生を対象に以下のような研究をしたことがあります。

How Do Japanese EFL Learners Elaborate Sentences Complexly in L2 Writing? Focusing on Clause Types

論文の概要は以下のとおりです。

ライティングによる絵描写タスクを日本語を母語とする英語学習者に課し,その際に用いる文の数に制限をかけることで統語的に複雑な文の産出を誘発し,学習者がどのような節を用いて文を複雑に書こうとするのかを明らかにしようとした論文です。別途行ったエッセイライティング課題をライティングの熟達度として操作的に定義し,熟達度によって用いられる節の数が異なるのかも検討しました。結果として, 文の数が制限されることにより等位節,関係節,非定型節の産出が増え,これらの節は文を複雑にするために学習者がよく用いることが明らかになりました。また,非定型節は熟達度が高くなるほど多く用いられる傾向にありました。これらの結果に基づき,節の数や節の長さなどの指標を用いるのだけではなく,節の種類にも着目することで,学習者のライティングをより詳細に捉えられる可能性について論じました。

https://tamurayu.wordpress.com/2017/02/27/nishimura-et-al-2017/

この研究では,上限を決めるというより,6コマの絵描写を6文で書くよう指示した場合と,そのような制限をつけなかった場合を比較しています。したがって「◯文以内」という上限をつけたわけではありません。よって,上限をつけた場合も同じようなことが期待できるとは限らないという点には注意が必要です。

入試問題へそのまま応用できるというわけではないが…

文数の下限ではない指定という方法が,入試問題の形式として応用可能かというとあまりそうは思っていません。ただ,文数の制限という操作は必ずしも流暢さを引き出す目的ではなく,複雑さを引き出すことにも応用できるのではないかという示唆が上記の研究にはあると思っています。

課題として,それなりに内容的な分量を求めるように工夫すれば,5文以内という制限よりも短い文数で書くことを難しくすることはできそうです。それを例えば2文とかで書いていた場合には,内容的な点でのタスクのゴールを満たしていないということで減点することができます。そして,同じ文数でも…and…but…のように等位接続詞で文をつないでいるのか,Even though…,…のような従属節を使っているのか,the places where the students can learn…のように関係節を使っているのかで,文法知識の発達段階をみることができそうです。もちろん,節だけではなく,節を句で表すことができるかどうかというのも複雑さを上げるという意味ではポイントになります。ただし,特に主語位置でのnominalizationは文理解がしづらくなるので要注意と言われることもあります(https://owl.purdue.edu/owl/english_as_a_second_language/esl_students/nominalizations_and_subject_position.html)。

また,埼玉県入試問題のように,最低ラインがあるような場合でも,うまく比較できれば有益な知見を生み出すこともできるかもしれません。

例えば,3文という最低ラインの作文と,5文という最低ラインの作文を比較することを考えます。この時,もし産出される文数が減るのであれば,そのときに1文の統語的複雑さはどうなるのか,また,そのときにどのような手段で複雑さをあげるのか,というのは面白い観点になり得ます。もちろん,作文で求められる課題があまりにも異なっていると比較としての意味はなしませんが。

おわりに

この記事では,文の数を制限する(下限or上限)を設けるという操作と,それがどのような言語産出を誘発するのかということについて考えてみました。私はこの記事で,「複雑さ」とか「統語的複雑さ」といった用語を割とゆるく使いましたが,それが一体何なのか,そしてどういった指標でそれを捉えるのかといった問題は,それだけで本1冊が書けるくらいの研究領域になっています。よって,あまり安易にこの分野に足を踏み入れると危険ではあるのですが,文数の制限と言語産出というのは,教育的示唆にも繋げやすいかなと思うので,ライティングに興味のある院生さんがいたらぜひ掘り下げていってもらいたいなと思ったりもします。

なにをゆう たむらゆう。

おしまい。

後輩の原稿を読んであげてほしい

はじめに

この記事は,主に現在大学院に在学していて,そして同じ大学院に(大きなくくりでの分野が同じ)先輩・後輩の関係があるような人(主に私の後輩なんですがそれ以外の人にも)向けで書いています。ただし,私が博士後期課程時代を過ごした環境はかなり特殊な環境だったので,どんなところでも実践可能なわけではないかもしれないという点だけご留意ください。

最近,発表や論文投稿などを意欲的に行っている後輩の話を聞いて,先輩が後輩の成果物が他の人の目に触れる前に見てあげるというようなことが私がいたときのようには行われていないのかなと感じることがありました。それはもったいないなと思うと同時に,きっといろんな要因があるかなと思うので,いくつか論点をあげてみたいと思います。

自分がどういう経験をしてきたか

私が所属していた大学院では,いわゆる講座制のような形で,ある研究室(ゼミ)に所属して,そのゼミのトップである教授のもとで研究を行っていくというスタイルではありませんでした。主の指導教官は決まっていても,その先生以外のゼミに出ることは当たり前に行われていて,縦と横の相互交流が非常に活発な環境でした。また,学生の自主性を尊重する土壌があったので,学生同士で縦に横につながって共同研究をすることもたくさんありました。一方で,先生主導で研究をやるということは私はほとんど経験しませんでした(別にこのことにまったく不満はないです念の為)。そうした環境だったからか,先輩が後輩の面倒を丁寧に見てあげるということも,明文化されないルールのようなものとしてありました。ゼミ発表前のレジュメチェックから,口頭発表申し込み前のアブストラクトのチェック,投稿論文のチェックなど,後輩は先輩にチェックをしてもらっていました。それだけにとどまらず,同期同士で見せあったり,ときには先輩(n=1)から読んでほしいと頼まれることもまれにありました。余談ですが,私が見聞きする範囲では,現所属先の研究科(厳密に言うと私は大学院の担当になっていないので私の所属は学部ですが)は人数もそこまで多くないのと,フルタイムの院生が多くないのでそういったことがあまり行われていないのかなと思いました。

後輩からしたら先輩にお願いはしづらい

普通に考えて,ただでさえ忙しそうに見える先輩ですし,自分の論文を読んでもらおうと思うのは躊躇して当然です。投稿論文はどこに投稿するかで長さは変わってきますが,それなりの量の論文をまず読んで理解しなければいけませんし,その問題点を指摘したり,質をあげるためのコメントをすることはそれなりに労力がかかることです。学年が近かったり,いつも行動をともにするような親密度があればハードルはいくらか下がるかもしれませんが,それでも後輩からは頼みづらいでしょう。

後輩の立場にある人に言いたいのは,先輩は忙しそうに見えるかもしれませんが,先輩だって後輩に頼られることは嬉しいことなので,勇気を出してお願いしてみてほしいということです。もちろん,締め切り直前に送るとか,「明日までにお願いします」みたいな無理なお願いはNGです。余裕を持って仕上げて,そしてある程度時間の猶予をもって「○○日が投稿の締め切りですので,○○日までにコメントいただければと思います」みたいな感じで依頼するのがいいでしょう。こうしたやりとりは1度ではなく,何度も繰り返せるのが理想的です。

先輩の立場にある人は,そういう後輩からの声のかけづらさを考慮して,積極的に後輩に声をかけてあげてほしいなと思います。「最近論文書いてる?」「今度の○○は投稿するの?」とか,そういう日常的な会話の中で後輩の事情を聞いてあげていれば,「実は今○○に投稿する論文を書いてるんです」みたいなことをもあるはずです。そうなったら,「投稿する前に送ってもらえたら読むよ~」とかって言ってあげれば,後輩が感じるハードルはぐっと下がるでしょう。

後輩の指導をするというのは自分のためになる

正直,自分が論文を書いていなかったら人の論文にコメントするなんてできませんよね。だからこそ,先輩は自分が論文を書いている姿を積極的に後輩に示してあげるとともに,自分が経験したことを少しでも後輩に還元できるようにしてほしいなと思います。もちろん,自分のことに使える時間を人のために費やすわけですから,めんどくさいと思ったりするかもしれません。ただ,私はこうしたことも次にあげる3点で研究者としての自分の成長に必ずつながると思っています。

1. 自分のこの先のキャリアで役に立つ

あまり将来の利益という観点で語るのは好きではありませんが,そういうことも2つあるかなと思います。1つは,大学教員で指導生を持ったとき。もう1つは,査読者になったときです。

普通,誰かの論文を見てコメントをするというのは指導生をもつ大学教員しかやらないような仕事だと思います。それを大学院時代に経験できるというのは,大学教員としてそのようなポジションについたときに間違いなく役に立つでしょう。また,論文をそれなりに書いていて,それなりに研究者として認知されるようになれば国内の学会誌であったり国際誌であったりの査読を頼まれることがあります。これも研究者の重要な責務の1つです。出版前の論文を読んで,論文の問題点,評価できるポイント,どうしたらもっと良くなるかを指摘するというのは,まさに査読者が行うことだと思います。研究者を目指すのであれば研究コミュニティへの貢献という観点でも良い査読者になったほうがいいに決まっていますので,人の論文を読んでコメントすることは査読者になるための練習でもあると思います。

2. 自分の論文を読む目線が変わる

1つ目のポイントは長期的な視点で役に立つという話でしたが,もちろん短期的にも人の論文を読むことの意味はあります。それは,人の論文を読むとより客観的に自分の論文も読めるようになるということです。議論の流れがちぐはぐなことに気づいたり,結果の解釈の問題に気づいたり,本当にいろいろなところに「論文を書く」ということに対しての学習のポイントが転がっています。そういったことは,出版された論文を読むだけ,あるいは自分で書いた論文を読み直すだけではなかなか経験できません。後輩の論文を良くするためには何が必要なのか,ということを考えることは,必ずや自分の論文を良くすることにもつながってきます。そしてこれは,いままさに自分が書いている論文であったり,直近の未来に論文を書く際にも生きてくることなのです。

3. 自分の幅を広げる

自分の研究に関わる論文だけを読んでいたりすると,なかなか他の領域の話を読む機会に出会うことはできません。同じ分野の後輩といえど,自分とそこまで近い領域の研究ではない研究をしている後輩の論文を読めば,その領域のことを勉強する機会にもなります。そうすれば,自分の視野も広がりますし,少しメタ的な目線で複数の研究領域の関連性を考える機会にもなります。

これは私も院生時代に経験したことがあるのですが,ある程度研究テーマが決まってくるとどんどん細部にのめり込んでしまって,そこから派生的に別の研究テーマを生み出そうとしがちになってしまいます。そうすると,なんでその研究やっているのだろうとか,その研究が分野にどう貢献できるのだろうという視点を取ることが難しくなってきます。こういうときに,少し離れた分野の研究を読むと,その視点を1つ抽象的なレベルにもっていくことができると感じています。自分の専門と言える領域で一流を目指すのはもちろんですが,私が見ていて一流だなと感じる人は,その領域外についても豊富な知識を持っていて,やろうと思えばその領域で質の高い研究ができるだろうなという人です。これは私の個人的な意見ですが,そういう研究者って憧れませんか?

時間はかかるかもしれないが誰でも経験できることでもない

繰り返しになりますが,いくら自分にメリットがあるといっても時間はかかります。それは間違いありません。ただ,先輩と後輩の交流が活発に行われているという環境でなければ,そもそも後輩の研究論文を読むという機会はないわけです。そう考えると,どこの大学院でも,そして誰でもが経験できることではありません。自分を成長させてくれる機会が周りにあるのであれば,それは積極的に活かしてほしいなと思います。

ただ後輩の論文を読むだけではなく,一緒に共同研究をやるというのも非常に有効な手段でしょう。この話はまた別の機会にできれば書きたいなと思います。

おわりに

私はまだまだペーペーなので,こんな偉そうなことを言う立場でもないのは重々承知の上ですが,投稿前に論文を読み合う文化というのはそのコミュニティの研究力を上げるということを私は信じて疑わないので,こういう記事を書きました。研究ってやっぱり一人じゃできないというか。願わくば,私のところの研究科もそうやって活発になってほしいなぁと思っているのですが,私はまだまだそちらの運営に関わるほど偉くないので,いつかそういう仕事をするようなときが来たら,頑張りたいなと思います。

なにをゆう たむらゆう。

おしまい。

インプット仮説とアウトプット仮説ってそういうことか?

はじめに

Twitterに流れてきた下記の記事を読みました。

4技能の英語民間試験を大学入試に導入」の根拠とされる学習指導要領改訂のポイントとは?

入試にスピーキングだったりライティングだったりの産出技能を取り入れることに関連して,第二言語習得研究におけるインプット仮説とアウトプット仮説が紹介されています。そして,そこからアウトプットの重要性が導き出されます。この2つの紹介の仕方に語弊があるというか,当該記事の筆者と同様に第二言語習得研究を専門としている者として納得がいきませんでした。この記事でどこに語弊があって,なぜ納得がいっていないのかを書いておきたいと思います。私がここで取り上げる事自体は,上記記事の中心的話題というわけでは必ずしもないですが,理論的な援用がされていると考えられる部分に問題があるのではという意味で指摘する必要があると考えた次第です。

インプット・ファースト?

この記事ではインプット仮説はインプットの重要性を主張したもの,そしてそれに対比されるようにアウトプットの重要性を説いたのがアウトプット仮説だと紹介されています。それについては異論ありません。ただし,インプット仮説=「インプット ・ファースト」と表現することは語弊があると思います。つまり,インプット仮説とアウトプット仮説の対立は,

なぜ英語学習の早い時期からアウトプットが必要なのでしょう?最初はインプット(リスニング・リーディング)だけでは駄目なのでしょうか?

という問いに対する答えを与えてくれるようなものではないし,研究者たちもそのような主張をしているわけではないということです。

この2つの仮説の対立は,必ずしも「先にインプットがあってからアウトプット」ということではありません。言語習得にはまずはインプットというのは大前提の話なのでそこは否定しようがないはずで,アウトプット仮説を提唱したSwainもそのように主張したわけではありません。

インプット仮説はインプットのみ(正確にいうと理解可能なインプット)で習得がされるとした(注1)のに対して,アウトプット仮説は,インプット理解のみでは言語の形式面に注意を向けなくても意味の理解が可能な場合が多く,インプットのみでは限界があるということを指摘したわけです。この主張の背景にはカナダのイマージョン環境でフランス語を学ぶ学習者たちの存在がありました。イマージョン環境でフランス語を学び,フランス語を理解すること,そしてフランス語を使って対話相手に理解されることができるようにはなっても,産出技能ではまだ母語話者とは差があり,非母語話者としての痕跡が残ってしまったのです。この状態からさらに上のレベルに到達するためにはアウプットを通して言語の形式面に注意した処理が必要になるのではないかというのがSwainの考えでした。

初期段階からアウトプットも大事だという主張には同意

私も,学習の初期段階でアウトプットをさせるべきではないとは思っていませんし,インプットだけで良いとは思っていません。インプット・ファーストの原則は守りながらも,アウトプットもさせれば良いだけです。このことを,学校の授業展開を例に取って考えてみましょう。

マクロな視点で見た時に,例えば最初の3年間はインプットしかやらず、その後3年間でアウトプットだけやるというのが「インプット・ファースト」であれば,私は反対です。また,これの方がいいという研究者もあまりいないのではないでしょうか。

大事なことは,インプットの方が簡単だから先でアウトプットの方が難しいから後なのではないということです。インプットにも,アウトプットにも,難易度の差はあるわけです。つまり,簡単なインプットがあれば難しいインプットもあり,簡単なアウトプットもあれば,難しいアウトプットもあるということです。私が大事だと考えるのは,簡単なインプット→簡単なアウトプットという難易度の順番です。つまり,インプット→アウトプットということだけではなく,まずは難易度の低いものから徐々に難しいものへという大きな流れも考える必要があるのです。この点において,私は学習の初期段階でもアウトプットさせることは可能だし,むしろ学習者のレベルにあっているのであればどんどんさせていいと思っています。

ミクロなレベルでの授業の構成では,インプット->アウトプットになることは十分にありえますし,むしろアウトプットを取り入れている授業のほとんどはこうした形態になっているのではないでしょうか。例えば最初の1時間目はインプット,2時間目はアウトプットというように「インプット・ファースト」になっていることは当然あるでしょう。あるいは1時間の中で最初の30分はインプットでその後の30分でアウトプットということもあるかもしれません。そして,このことを私は何ら間違っているとは思っていません。むしろ,「インプット・ファースト」は大原則であるとさえ思っています。

「インプット・ファースト」とPPPは違う

ただしここで注意したいのは,このインプットからアウトプットという流れは,必ずしも直前に受けたインプットがその場で習得されてその直後のアウトプットで完璧な形で表出すると想定しているわけではないということです。Presentation, Practice, Production (PPP)の授業構成のように,その日に教えた文法をその日のうちに正しく産出させるような考え方を私は採用しません。むしろ,第二言語の発達はある側面を1回または数回の授業で完璧にして,完璧である側面を増やしていくのではなく,不完全ではあるけれども総体としての形を作っていくという過程を辿るからです。このような考え方でいくと,次の記述にも同意できません。

「インプット・ファースト派は「まずはしっかりと文法を理解してから、アウトプットの練習をしよう」と考えます。

前述のように,ミクロな視点でインプットは先にすべしという考え方を「インプット・ファースト派」と呼ぶのであれば,私は間違いなく「インプット・ファースト派」だと思います。しかしながら,私は「まずはしっかりと文法を理解してからアウトプットの練習をしよう」などとは考えません。これは過去に書いたいくつかのブログ記事であったり,下記の本に収録されている拙稿を読んでいただければわかるかと思います。

タスク・ベースの英語指導―TBLTの理解と実践 

まとめ

ここまでの議論から明らかなように,上記記事中のインプット仮説・アウトプット仮説の説明の仕方は,学術的に不適切であると言えます。一般向けに書かれた記事ですので,ある程度噛み砕いて説明する必要があったことは十分に理解できますが,それでも上記記事は読者にインプット仮説を誤った形で伝えています(注2)。

「インプット・ファースト」はインプット仮説の主張のことを指しているのではなく,私の主張は誤読に基づいているという反論もあり得るかもしれません。しかしながら,それはかなり無理筋でしょう。インプット仮説を紹介する節の最後に、「この『インプット・ファースト』の法則」と書いてあるにもかかわらず,「この『インプット・ファースト』の法則」がインプット仮説を指しているわけではないと読むほうが困難です。だとすれば,「この『インプット・ファースト』の法則」の「この」が指しているのはなんでしょうか。

おわりに

「第二言語習得研究者のコミュニティはあまり身内の批判をしないけれど,誤ったものを誤っていると指摘することも研究者の大事な責務である」,というような話を寺沢さんとポッドキャスト収録で話したので,今回はこういった記事を書きました(注3)。それ以上でもそれ以下でもありません。

なにをゆう たむらゆう。

おしまい。

 

注1.英語ではcomprehensible inputと言いますが、これも抽象的な概念なので、実際に何が学習者にとってのcomprehensible inputとなるのかとかを操作的に定義するのは結構難しいという問題があります。ここではこの問題には触れません。また,インプット仮説の意義はこれだけではなくて,習得(acquisition)と学習(learning)を分けたというところにもあると個人的には思っています。詳しくはまた別の機会に論じたいと思いますが,このような考え方自体は形を変えて今でも受け継がれているといえると思います。例えば,明示的・暗示的知識もこの流れでしょう。

注2.アウトプット仮説の説明自体(気づきと文法の意識化の話など)は問題ないかと思いますが,インプット仮説との対比の仕方は語弊があると思います。

注3.英語教育2.2CAST2月号ではこの話にはなっていませんが,寺沢さんとの対談の最終回にこの話をしています。

 

「英語教育を変えたい」みたいな素朴信念の先へ

はじめに

昔から,「そんなの研究じゃない」って思うような発表をいろいろな場所で見たり聞いたりして,そのたびに「問題点がどこにあるか」を指摘することは容易にできたし,してきていたという自負があります。しかしながら,なぜそういう発表があるのか,どうして「そんなの研究じゃない」と私が(そしておそらくは多くのちゃんと研究している人が)思ってしまうことを「研究だ」と思い込んでしまうのかについてはあまり深く考えたことがありませんでした。このことについて考えてみると,その一因は英語教育についての素朴な信念なのかもしれないと思うに至りました。以下,英語教育系の研究を始めようと思う学部生や大学院生の方に特に読んでほしいなと思いながら書きます(※ただ,書き始めたらただのナラティブみたいになったので研究の参考にしようという気持ちであまり期待せず暇つぶし程度に読んでください)。

B4的全能感

英語教育系で,大学の学部生くらいまたは大学院に入りたての修士1年生くらいで,ちょっと研究に興味出てきたくらいの頃って,「日本の英語教育を変えたい」みたいな素朴な信念を持つことってよくあると思うんです。ほとんどは自分の受けてきた英語教育の経験だったり自分が見聞きする範囲の話だったりあとは世間一般で根拠もなく言われるような話に基づいてるようなものです。私はその素朴な信念を持つようになることって発達段階みたいなもので,誰しも(は言い過ぎだとしても多くの人が)通るようなものだと思うのです。かくいう私も恥ずかしながら,学部を卒業して修士号取得のためにアメリカに行った時はまさにそういうことを本気で思っていた時期がありました。

日本の英語教育はてんでダメだ。教え方が間違ってるんだ。そして入試がいけないんだ。

みたいなやつです(注1)。もっといい教え方をしたら,もっと入試が変わったら,日本の英語教育は良くなるに違いないみたいなの。もしこれを読んでくださっている方が学部生や大学院生だとしたら,そういうことを思っていたりしているかもしれません(その事自体は私は「発達段階」だと思っているので全く悪いことだと思っていません)。また,「確かに昔はそんなこと思っていた時期もあったなぁ」みたいなことを思っているオトナの方もいるかもしれません。これってB4的全能感みたいなものかなと。

私は特に身近に英語教育の大学院生が活発に研究しているような学部に所属しておらず,そしてそもそも大学院生の人がどんな研究しているのかすら知る機会はありませんでした(あったのかもしれませんがおそらく当時はあまり興味もなかったので覚えていないのだと思います)。そういう中で,「大学院に行く」と決意したくらいですから,周りの学部4年生よりも自分には知識があると思いこんでいました。少しは,本当に少しは本を読んでいたし,ゼミでも結構鋭い意見を出す学生っていう自意識みたいなのもあったんです。うぬぼれですね。今振り返ると。いや,素朴信念を持っている人がすべてそういう人だと言いたいわけではないのです。ただ,「英語教育を変えたい」みたいなことを思うのって,「英語教育がだめだという認識」と「英語教育を変えられる、そして変えた方が絶対に良いという認識」の2つから来ていると私は思っています。この2つについて詳しく解きほぐすみたいなことをやっていると日が暮れてしまうのでここではやりませんが,結論からいうとどっちの認識についても「そんな簡単な問題じゃあねぇよ」っていう話なのです。そのことに気づける機会があった(ある)のかどうか,というのが大きいのではないかなと思います。

私の昔話

えらそうなこと書いていますが,前述の通り私も「素朴英語教育改革論者」みたいなこと言ってたんですね。むかーしむかしは。このブログのメニューにあるTogetterまとめで過去のものを見てもらうと,そのことが少しはわかるかなと思います。そのような過去をもつ私が,今客観的に当時の自分を振り返ることができるのはなぜなのか,という話を少しさせてください。

私は,2011年にTwitterを初めて,当時はTwitterでフォロワー数増やしたいみたいな願望持っていました。そこで,どうやったらTwitterでフォロワー数増やせるかなとか思って調べていたときに,誰が言ってたのかもはや思い出せないのですが「Twitterのプロフィール欄にはデカイ夢を書け」みたいなアドバイスを読んだんです。それを思いっきり真に受けた私は「日本の英語教育を変えたい」とかってプロフィール欄に書いてたんですね。いや,若かったからとかでは片付けられないくらい恥ずかしくて,おええええええええええって感じになりますね。その当時のことを知っている方からは,今でも当時のことをいじられることが今でもよくあります。

話が少し脱線しましたが,私はそうやってTwitterというメディアで恥ずかしげもなく「英語教育をがえだい!!!」って叫んでいたわけです。一方で,その今となっては恥ずかしい過去というのが,実は幸いなことだったなと思うこともあるのです。それはなぜかといえば,私が持っていた「英語教育をがえだい!!!」みたいな素朴な信念に対して「いや,世の中そんな単純じゃあねぇよ」と言ってくれる大人の人がたくさんいたからなんですね。名前はあえて出しませんけども色々な人とやりとりして,言語政策の本を読んでみたらとか,言語帝国主義の本を読んでみたらとか言われて(注2),「そうか俺は何も知らないのに意気がってたんだ」みたいになるわけです。自分の視野が狭すぎるってことに,全然気づいてなかったんです(注3)。

素朴さに気づけないと…

私は運良く,自分が抱いていたような英語教育に対する思いがすごく素朴な信念であることに気づくことができました。ところが,その素朴信念を相対化する機会に恵まれないままに大学院に進んで研究を始める人も当然ながらいて,そういう人ってたいてい「◯◯の効果」みたいな研究をやりたいというようなケースが多いような気がしています(具体例挙げると誰かの個人的批判になりかねないのでなにか具体的な指導法とかを◯◯に入れてご想像ください)。オブラートに包まずにいうと,自分が信仰しているやり方に対して「科学的な」根拠を与えたいタイプの人が多いというのが勝手なイメージです。別に実践的な示唆を目指したい研究がダメとかではありません。例えば,フィードバックの研究とかって最初は実践的な疑問から生まれてきてますよね。そして分野の1領域を形成するような大きなフィールドになった。「明示的指導」なんかもそうだと思います。

でも,たいてい「自分の興味あること」から出発する研究って研究と呼べる代物にならないことが多い気がします。というか,最初からバイアスかかってないですか?というのは常に問いたいです。例えば、「シャドーイングの効果に興味あります」という人がいたとき、「シャドーイングに効果があると思ってるからそれを確かめたい」って思ってませんか?って。自分が信じてることと逆の結果が出たときに、信じてることが支持された時と同じ態度で論文書けますか?っていうことですね。そういう中立的な態度って結構大事だと個人的には思っています。

自分の関心と分野の関心の往復運動をしながら研究課題を見つけられるといいのですが,あまりにも前者ドリブンすぎると独りよがりになるというか。もちろん、実践研究みたいなものもあるのでそういうアプローチを否定したりはしないのですが。

まとまらないけど

 全くまとまらないんですが,何かを変えようと思って簡単に変わるものじゃないし,その理由がいくつかの個別の要因に還元できるほど世の中単純になってないよねってことを頭の片隅に入れておくことって大事だと思うんです。それから,とにかく自分の持ってる素朴な信念を相対化する意識を持っていることも大事なんじゃないかなと。うまく言葉にできている自信はないんですが,まあたまにはこういうまとまりのない話でも公開してしまいます。

なにをゆう たむらゆう。

おしまい。

注1. これこじらせたままオトナになってしまった人もまれに見るのですが,そういう人はあまり研究の舞台で目立つことはないのでとりあえず置いておきます。

注2. 金髪の写真をアイコンにしたよくわかんねぇ若者が「英語教育をがえだい!!!」とかいって絡んでも,おすすめの本を教えてくれるほどに当時のTwitterはまだいいところだったんですね。今だったらブロックされているかもしれないところです。それから,自分がいま若い時の自分みたいな人を見た時,自分がしてもらったような対応できるかと言われると自信はないです。

注3. 自分で自分を少しだけかばうと,そうやって言われて素直に本買って読むくらいには真面目だったんです。

2019SLRFで発表します

実は海外の学会で口頭するの初めてです。そもそも口頭発表自体がだいぶ久しぶりなので結構緊張しています。スライドの細かいところは多分直前までいじるので変更があるかと思いますが,Github上に資料を置いています。

https://github.com/tam07pb915/2019SLRF

前にJSLARFで喋った博論の話なんでJSLARFにいた方は発表会場立入禁止ですが,資料とかもオープンにしてなかったので個人的には今回が初公開っていう感じです(もちろんウェブには博論の要旨が公開されてるんですが)。JSLARFで喋った時は実験2つの話をざっくりしたのですが,今回はそのうちの1つの実験だけについてで,もう少し先行研究とのつながりをメインに話せるかなと思っています。サラミしているというよりは,投稿する論文にするときにうまく1つにコンパクトにまとめるのが難しく,実験1つで1本の投稿論文として出そうと思うにいたったため,1つの実験だけでストーリーになるようにしているつもりです。したがって,博論全体のストーリーとはちょっと違います。

学期開始直前でガンガンメールがくるし帰国までにやらないといけないこともどんどん増えてきているので,発表終わったら引きこもりすることになるかと思いますが,どうかご理解くださいますようお願い申し上げますm(_ _)m

なにをゆう たむらゆう

おしまい。