2022年
4月
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

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|

2022-04-19 Rとjuliaとrubyとpython

_ 辞書

4つの言語の比較の第六弾として,辞書とかハッシュなどと呼ばれるデータの取り扱いについて,表にまとめてみた.perlを学んだときに,私は始めて知ったものだが,なかなか便利なものだと感じた.perlやrubyではハッシュと,pythonやjuliaではdictionaryつまり辞書と呼ばれる.Rにはこのようなデータ構造は無いが,いくつかの方法で似たような取り扱いができるので,その一つのやり方として,名前付きのベクトルを使った方法を示した.
Rjuliarubypython3
定義 h<-c("a"=1,"b"=2) h=Dict("a"=>1,"b"=>2) h={"a"=>1,"b"=>2} h={"a":1,"b":2}
内包表記 d<-sapply(as.character(1:5),function(x)as.numeric(x)^2) d=Dict((string(k),k^2) for k=1:5) d=(1..5).to_h{|i|[i.to_s,i**2]} d={str(k):k**2 for k in range(1,6)}
テキスト x<-scan(text="H 1\nHe 4", what=list("",1))
names(x[[2]])<-x[[1]]
x<-x[[2]]
x=Dict(split(i) for i in split("H 1\nHe 4","\n")) x=Hash[*"H 1\nHe 4".split] x=dict(i.split() for i in "H 1\nHe 4".split("\n"))
アクセス h["a"] h["a"] h["a"] h["a"]
追加 h["c"]<-3 h["c"]=3 h["c"]=3 h["c"]=3
キー names(h) keys(h) h.keys h.keys()
h values(h) h.values h.values()
キーの存在 "a"%in%names(h) haskey(h,"a") h.key?("a") "a" in h
値の存在 1%in%h 1∈values(h) h.value?(1) 1 in h.values()
長さ length(h) length(h) h.length
h.size
len(h)
結合 d<-c(x,h) d=merge(h,x) d=h.merge(x) d={**h,**x}
上書き結合 h<-c(x,h) merge!(h,x) h.merge!(x) h.update(x)
Rでは,data.frameを使っても同じようなことができる.
x<-read.table(text="H 1\nHe 4",row.names=1)
x["H",]
とすると,一列目を名前として取り込むことができ,これを用いて値を取り出すことができるが,上で示した方法では必要なかったカンマをつける必要がある.使いやすさとしては,テキストから辞書への変換はrubyが楽で, pythonでは結合が少しやりにくいので,ruby, julia, python, Rの順かな.ネタが尽きてきたので,シリーズになっていた今回の言語比較ももうそろそろ終わりになりそうです.perlを加えて比較すべきだったかも知れませんが,perlの文法はかなり忘れてしまったし,perlを書く機会もあまり無いだろうから,まあ良いかな.