2021年
2月
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

setup diary

2007|12|
2008|01|02|03|04|05|06|07|08|09|10|11|12|
2009|01|02|03|04|05|06|07|08|09|10|11|12|
2010|01|02|03|04|05|06|07|08|09|10|11|12|
2011|01|02|03|04|05|06|07|08|09|10|11|12|
2012|01|02|03|04|05|06|07|08|10|11|12|
2013|01|02|03|04|05|06|07|08|09|10|11|12|
2014|01|02|03|04|06|08|11|
2015|01|02|03|04|05|06|07|08|10|11|12|
2016|01|02|03|04|05|06|07|08|09|10|11|12|
2017|01|02|03|04|05|06|07|08|09|10|11|12|
2018|01|02|03|04|05|06|07|08|09|10|11|12|
2019|01|02|03|04|05|06|07|08|09|10|11|12|
2020|01|02|03|04|05|06|07|08|09|10|11|12|
2021|01|02|03|04|05|06|07|08|09|10|11|12|
2022|01|02|03|04|05|06|07|08|09|10|11|12|
2023|01|02|03|04|05|06|07|08|09|10|11|

2021-02-18 久々の言語比較

_ perl, pythonとruby, R

perl6について調べていたら、rakuという名前に変わっていた。perl6はあまりにもperl5とは違い過ぎていたので、混乱しないように名前を変えたのだろう。rakuはperlの「There's More Than One Way To Do It」という思想を発展させたものであると感じられるが、多様過ぎて理解できないことが多い。関数風に書くのが嫌いな人は、メソッド風に書くこともできるし、いろいろな書き方ができる。でも、必要なスペースを省略して、怒られることが多い。

最近はデータの処理には主にrubyとRを使っている。rubyはオブジェクト指向が徹底されていて、「楽しく」プログラムを書くことを目指している。昨年末にはruby3.0が出たようだ。ruby1.8から2.0に変わった時には、文字列などの扱いが変わって、プログラムの変更に苦労した覚えがある。他にもキーワード変数が導入されたり、様々な変更があった。互換性という意味では、3.0はそれほど大きくは変わって無いように感じられるが、速度は改善したらしい。最近のrubyはあまり勉強していないので、私の知らないことが増えているようなので、もう一度勉強し直そうかな。

私がキーワード変数を始めて使った言語はRである。最初は面倒に感じたが、慣れるとそれなりに使いやすい。Rではキーワード変数を使う時に「=」を使うためか、通常の代入が「<-」となっているのが、初心者には分かりにくいように感じる。特に、負の数を代入するときにはマイナスが二つ連続するので、見にくい。以前は主なdata処理はrubyでやって、Rでグラフを描くというように使っていたが、数値の処理はRが得意だということに気がついて、data処理もRで行なうことが多くなってきた。特に、行列の計算などは速いし使いやすい。rubyは行列は少し苦手かな。でも、Rは文字列処理が苦手なんだよな。

世界的にはpythonの人気が高まっているようである。数値計算を行なうときには、numpyを組み込むとそれなりのことができるようだが、コードが読みにくいように感じられる。何か関数で何がメソッドなのかが分かりにくいのも欠点だと思っている。あと、行数が増えてしまうのも私にとっては欠点かな。でも、読みやすくするという点では、仕方ないのかも知れない。もうしばらくは私がpythonを主に使うことは無いだろう。ただ、マイコンで使えるmicropythonはなかなか魅力的である。以前はマイコンは機械語かC言語ぐらいしか使えなかったが、スクリプト言語が使えるようになって、開発効率が上がるだろう。

ちょっとしたdata処理にはawkが便利だと思うこともある。通常の言語では、ファイルの読み込むなどで、手間取るところを、ほぼ省略できるのは便利である。でも、複雑なことをするのは難しいかな。

今後もしばらくは、rubyとRあとawkを使って、data処理をして行くと思う。pythonはマイコンでmicropythonをいじる程度かな。


2021-02-21 forとmatrix

_ Rのくせ

Rをいじっていたら、そのくせに苦労したので、その対処法をメモしておく。

まず苦労したのが、forループを使ってn回ループしようとして、n==0のときにうまく行かない点である。

for(i in 1:n){cat(i)}
とすると、n==0で実行すると1と0で二回実行されてしまうのである。いろいろと考えた結果、
for(i in (1:n)[0:n]){cat(i)}
とすると、うまく行くことが分かった。または、
for(i in seq_len(n)){cat(i)}
の方が素直かな。

次に苦労したのが、1行または1列の行列が自動的にベクトルに変換される点である。diag(3)[-1,-1]とすると2行2列の行列になるが、diag(2)[-1,-1]とすると、1行1列の行列になると思ったら、ベクトルになってしまうのである。これを行列にしたかったので、matrix(diag(2)[-1,-1],1)とした。美しくは無いが、仕方ないかな。

_ 2021/4/6追記

for(i in (0:n)[-1]){cat(i)}
でも良いかな。