|
setup diary |
R | julia | ruby | python3 | |
定義 | f<-function(x){2*x} | f(x)=2x | def f(x) 2*x end | def f(x):return 2*x |
省略値 | f<-function(x=1){2*x} f() | f(x=1)=2x f() | def f(x=1) 2*x end f | def f(x=1):return 2*x f() |
キーワード引数 | f<-function(x,y){x^y} f(y=1,x=2) | f(;x,y)=x^y f(y=1,x=2) | def f(x:,y:) x**y end f(y:1,x:2) | def f(x,y):return x**y f(y=1,x=2) |
可変長引数 | f<-function(x,...){x+length(c(...))} f(3,2,1) | f(x,a...)=x+length(a) f(3,2,1) | def f(x,*a) x+a.size end f(3,2,1) | def f(x,*a):return x+len(a) f(3,2,1) |
引数展開 | f<-function(x,y){x+y} a<-list(1,2) do.call(f,a) | f(x,y)=x+y a=[1,2] f(a...) | def f(x,y) x+y end a=[1,2] f(*a) | def f(x,y):return x+y a=[1,2] f(*a) |
無名関数 | (function(x){2*x})(2) | (x->2x)(2) | proc{|x|2*x}.(2) | (lambda x:2*x)(2) |
配列 | f<-function(x){2*x} f(1:10) | f(x)=2x f.(1:10) | def f(x) 2*x end [*1..10].map{|x|f(x)} | def f(x):return 2*x list(map(f,range(1,11))) |
合成 | f<-function(x){2*x} g<-function(x){x+1} g(f(2)) | f(x)=2x g(x)=x+1 (g∘f)(2) 2|>f|>g | f=proc{|x|2*x} g=proc{|x|x+1} (g<<f).(2) (f>>g).(2) | import toolz def f(x):return 2*x def g(x):return x+1 toolz.compose(g,f)(2) toolz.pipe(2,f, g,) |
R | julia | ruby | python3 | |
定義 | a<-c(1,2,4,8,4) | a=[1,2,4,8,4] | a=[1,2,4,8,4] | a=[1,2,4,8,4] |
連続 | b<-1:10 | b=Vector(1:10) | b=[*1..10] | b=list(range(1,11)) |
等差数列 | b<-seq(1,20,2) | b=Vector(1:2:20) | b=[*(1..20).step(2)] | b=list(range(1,21,2)) |
内包表記 | [i^2 for i in 1:5] | [i**2 for i in range(1,6)] | ||
map | sapply(1:10,function(x){2*x}) | map(x->2x,1:10) | [*1..10].map{|x|2*x} | list(map(lambda x:2*x,range(1,11))) |
最初 | a[1] head(a,1) | a[1] a[begin] first(a) | a[0] a.first | a[0] |
要素 | a[2] | a[2] | a[1] | a[1] |
最後 | tail(a,1) | a[end] last(a) | a[-1] a.last | a[-1] |
最後から | tail(a,2)[1] | a[end-1] | a[-2] | a[-2] |
範囲 | a[1:3] | a[1:3] | a[0..2] a[0,3] | a[0:3] |
追加 | a<-append(a,3) a<-c(a,3) | push!(a,3) | a.push(3) a<<3 | a.append(3) |
取出 | a<-head(a,-1) | pop!(a) | a.pop | a.pop() |
挿入 | a<-append(a,9,2) | insert!(a,3,9) | a.insert(2,9) | a.insert(2,9) |
削除 | a<-a[-3] | deleteat!(a,3) | a.delete_at(2) | a.pop(2) |
長さ | length(a) | length(a) | a.length a.size | len(a) |
逆順 | rev(a) | reverse(a) | a.reverse | list(reversed(a)) |
上書き逆順 | a<-rev(a) | reverse!(a) | a.reverse! | a.reverse() |
重複除去 | unique(a) | unique(a) | a.uniq | set(a) |
ソート | sort(a) | sort(a) | a.sort | sorted(a) |
上書きソート | a<-sort(a) | sort!(a) | a.sort! | a.sort() |
結合 | c(a,b) | vcat(a,b) | a+b | a+b |
含有 | 2%in%a | 2∈a a∋2 | a.include?(2) | 2 in a |
部分集合 | all(a%in%b) | a⊆b b⊇a | require 'set' Set[*a]<=Set[*b] Set[*b]>=Set[*a] Set[*a].subset?(Set[*b]) Set[*b].supset?(Set[*a]) | set(a)<=set(b) set(b)>=set(a) set(a).issubset(b) set(b).issuperset(a) |
積集合 | intersect(a,b) | a∩b | a&b | set(a)&set(b) |
和集合 | union(a,b) | a∪b | a|b | set(a)|set(b) |
差集合 | setdiff(a,b) | setdiff(a,b) | a-b | set(a)-set(b) |
対称差集合 | symdiff(a,b) | require 'set' Set[*a]^Set[*b] | set(a)^set(b) | |
最大 | max(a) | maximum(a) | a.max | max(a) |
最小 | min(a) | minimum(a) | a.min | min(a) |
総和 | sum(a) | sum(a) | a.sum | sum(a) |
R | julia | ruby | python3 | |
定義 | 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) |
x<-read.table(text="H 1\nHe 4",row.names=1) x["H",]とすると,一列目を名前として取り込むことができ,これを用いて値を取り出すことができるが,上で示した方法では必要なかったカンマをつける必要がある.使いやすさとしては,テキストから辞書への変換はrubyが楽で, pythonでは結合が少しやりにくいので,ruby, julia, python, Rの順かな.ネタが尽きてきたので,シリーズになっていた今回の言語比較ももうそろそろ終わりになりそうです.perlを加えて比較すべきだったかも知れませんが,perlの文法はかなり忘れてしまったし,perlを書く機会もあまり無いだろうから,まあ良いかな.
R | julia | ruby | python3 | |
読み込み | f<-file("index.html","r") d<-readLines(f) close(f) | f=open("index.html","r") d=readlines(f) close(f) | f=open("index.html","r") d=f.readlines f.close | f=open("index.html","r") d=f.readlines() f.close() |
ブロック | d=open("index.html","r") do f readlines(f) end | d=open("index.html","r"){|f|f.readlines} | with open("index.html","r") as f: d=f.readlines() | |
ファイル名 | d<-readLines("index.html") | d=readlines("index.html") | ||
全体読み込み | d<-readChar("index.html",file.info("index.html")$size,TRUE) | d=open(f->read(f,String),"index.html") | d=open("index.html","r"){|f|f.read} | with open("index.html","r") as f: d=f.read() |
書き込み | cat("Hello, world!",file="out.txt") | open(f->print(f,"Hello, world!"),"out.txt","w") | open("out.txt","w"){|f|f.print "Hello, world!"} | with open("out.txt","w") as f: f.write("Hello, world!") |
追加 | cat("Hello, world!",file="out.txt",append=TRUE) | open(f->print(f,"Hello, world!"),"out.txt","a") | open("out.txt","a"){|f|f.print "Hello, world!"} | with open("out.txt","a") as f: f.write("Hello, world!") |