SPMのウェブサイトには、SPM12はMATLAB R2016aにも対応していると記載されているが、SPMメインメニューからfMRIやPET/VBMなどに進もうとすると、エラーが出て動かない。
エラーは、spm_figure.mの778行目に出てくるdeleteコマンドで発生している。
ただし、これは「デスクトップの言語」が日本語のときのみで、英語の場合には、このようなエラーは生じない。
なので、MATLAB R2016aでSPM12を動かしたい場合には、現時点では「デスクトップの言語」を英語にしなければならない。
【追記】
「デスクトップの言語」が日本語である場合、正しく動かないのは、spm_figure.mの777行目のfindallコマンドの返り値が空のGraphics Placeholderになってしまうため。
次の行のdeleteコマンドで、引数となるallchild(t0)の値が空のセル配列となり、そこでエラーが起こる。
一方、「デスクトップの言語」が英語の場合には、findallコマンドの返り値はgraphics配列であり、allchild(t0)もgraphics配列となるため、エラーは生じない。
なぜ、このようなことになるかというと、「デスクトップの言語」が日本語の場合、figureの組み込みメニューが日本語に翻訳されるため、findallコマンドでラベルが"&Help"のものをさがすと見つからずに、空のGraphics Placeholderが返されることになるから。
これを防ぐためには、上述のように「デスクトップの言語」を英語とするか、あるいは777行目の "findall(allchild(F), 'Flat', 'Label', '&Help');" の '&Help' を 'ヘルプ(&H)' に変更する。
エラーは、spm_figure.mの778行目に出てくるdeleteコマンドで発生している。
ただし、これは「デスクトップの言語」が日本語のときのみで、英語の場合には、このようなエラーは生じない。
なので、MATLAB R2016aでSPM12を動かしたい場合には、現時点では「デスクトップの言語」を英語にしなければならない。
【追記】
「デスクトップの言語」が日本語である場合、正しく動かないのは、spm_figure.mの777行目のfindallコマンドの返り値が空のGraphics Placeholderになってしまうため。
次の行のdeleteコマンドで、引数となるallchild(t0)の値が空のセル配列となり、そこでエラーが起こる。
一方、「デスクトップの言語」が英語の場合には、findallコマンドの返り値はgraphics配列であり、allchild(t0)もgraphics配列となるため、エラーは生じない。
なぜ、このようなことになるかというと、「デスクトップの言語」が日本語の場合、figureの組み込みメニューが日本語に翻訳されるため、findallコマンドでラベルが"&Help"のものをさがすと見つからずに、空のGraphics Placeholderが返されることになるから。
これを防ぐためには、上述のように「デスクトップの言語」を英語とするか、あるいは777行目の "findall(allchild(F), 'Flat', 'Label', '&Help');" の '&Help' を 'ヘルプ(&H)' に変更する。
タグ
このページへのコメント
知人にこのエラーが出た人がおり、原因を調べていたら、ここに到達しました。原因がはっきりわかって助かりました。私のブログでも紹介させていただきます。どうもありがとうございました。