Python、R言語の書き換えメモ(基礎編)

2023年7月31日

PythonR言語の書き換え(変換)メモの基礎編です。
近年、データ分析機械学習の分野において、PythonR言語は非常に人気のあるプログラミング言語です。両言語はそれぞれ得意な分野があり、使い勝手や文法にも違いがあります。しかし、同じ目的を達成するためには、両言語で似たようなコードを書くことができます。またR言語統計解析プログラミングに特化した仕様になっているので、その分野の書籍が豊富にあります。R言語で書かれたプログラムPythonに書き換えたりするのは言語の習得にも繋がるのではないかと思います。言語の細かい説明はしてません、対応表として使うことを目的としてまとめました。




変数

Python R言語
>>> x=3
>>> y=2
>>> x+y
5
> x <- 3
> y <- 2
> x+y
[1] 5

文字列

Python R言語
>>> x="Hello"
>>> x
'Hello’
> x <- “Hello"
> x
[1] “Hello"

 

算術演算

加算

Python R言語
>>> 3+2
5
> 3+2
[1] 5

減算

Python R言語
>>> 3-2
1
> 3-2
[1] 1

乗算

Python R言語
>>> 3*2
6
> 3*2
[1] 6

除算

Python R言語
>>> 3/2
1.5
> 3/2
[1] 1.5

累乗

Python R言語
>>> 3**2
9
> 3**2
[1] 9

余剰

Python R言語
>>> 5%3
2
> 5%%3
[1] 2

階乗

Python R言語
>>> import math
>>> math.factorial(5)
120
> factorial(5)
[1] 120


R言語の指数表示対策
R言語では桁数の大きな数はデフォルトでは指数表示になります
これを解除する場合はoptions(scipen=**)関数で設定します。
> 100000
[1] 1e+05

options(scipen=10)
> 100000
[1] 100000

比較演算子

Python R言語
>>> 3 == 3
True
> 3 == 3
[1] TRUE
>>> 3 != 2
True
> 3 != 2
[1] TRUE
>>> 3 > 2
True
> 3 > 2
[1] TRUE
>>> 3 < 2
False
> 3 < 2
[1] FALSE
>>> 3 >= 3
True
> 3 >= 3
[1] TRUE
>>> 3 <= 2
False
> 3 <= 2
[1] FALSE
>>> x = [1,2,3,4,5]
>>> 3 in x
True
>>> 6 not in x
True
> x <- c(1,2,3,4,5)
> 3 %in% x
[1] TRUE
# not inは無し

 

ブール演算子

Python R言語
>>> x = 10
>>> bool(x)
True
>>> x = 0
>>> bool(x)
False
N/A

 

リスト、(R言語ではベクトル)

Python R言語
>>> list1 = (1,2,3,4,5)
>>> list1
(1, 2, 3, 4, 5)
>>> list1[0]
1
> list1 <- c(1,2,3,4,5)
> list1
[1] 1 2 3 4 5
> list1[1]
[1] 1
>>> import numpy as np
>>> list1 = np.array([1,2,3,4,5])
>>> list1
array([1, 2, 3, 4, 5])
>>> list1[0]
1

 

ディクショナリー、(R言語ではリスト)

Python R言語
>>> fruit = {“Apple":250, “Orange":200, “Melon":500}
>>> fruit
{'Apple’: 250, 'Orange’: 200, 'Melon’: 500}
>>> fruit[“Apple"]
250
> fruit <- list(Apple=250, Orange=200, Melon=500)
> fruit
$Apple
[1] 250
$Orange
[1] 200
$Melon
[1] 500
> fruit[“Apple"]
$Apple
[1] 250

 

関数

Python R言語
>>> def myfunc(x, y):
    return x + y

>>> myfunc(3,2)
5
> myfunc <- function(x,y){
return (x + y)
}
> myfunc(3,2)
[1] 5

 

if 条件文

Python

total =100

if total >= 100:
    print("100 or more")
elif total >= 50:
    print("Less than 100 More than 50")
else:
    print("Less than 50")

R言語

total <- 100 

if(total >= 100){
    print("100 or more")
}else if(total >= 50){
    print("Less than 100 More than 50")
}else{
    print("Less than 50")
}

 

switch 分岐文

R言語

fruit <- c("Apple","Orange","Melon","Grape","Pineapple")
val <- sample(fruit, size=1)
switch(val,
	"Apple" = print("リンゴです"),
	"Orange" = print("オレンジです"),
	"Melon" = print("メロンです"),
	print("それ以外です")
)

Python

Python 3.10以降からswitchに相当するmatch~caseが導入されました。

import random
fruit=["Apple","Orange","Melon","Grape","Pineapple"]
val = (random.choice(fruit))
match val:
	case("Apple"):
		print("リンゴです")
	case("Orange"):
		print("オレンジです")
	case("Melon"):
		print("メロンです")
	case _:
		print(“それ以外のフルーツです")

Python

Python 3.9まではif~else ifで代替する

import random
fruit=["Apple","Orange","Melon","Grape","Pineapple"]
val = (random.choice(fruit)) #fruitリストからランダムに値を選ぶ
if val == "Apple":
    print("リンゴです")
elif val == "Orange":
    print("オレンジです")
elif val == "Melon":
    print("メロンです")
else:
    print(“それ以外のフルーツです")

 

論理演算子

Python

and, or, not

age = 6
height = 130

# 6歳以上かつ(and)身長120cm以上
if(6 <= age and 120 <= height):
    print("乗車できます")
else:
    print("乗車できません")

# 6歳以上または(or)身長120cm以上
if(6 <= age or 120 <= height):
    print("乗車できます")
else:
    print(“乗車できません")

# 6歳ではない(not)人
if not(age == 6):
    print("6歳ではない")
else:
    print("6歳です")

R言語

&, |, !

age <- 6
height <- 120

# 6歳以上かつ(&)身長120cm以上の人
if(6 <= age & 120 <= height){
    print("乗車できます")
}else{
    print("乗車できません")
}

# 6歳以上または(|)身長120cm以上の人
if(6 <= age | 120 <= height){
    print("乗車できます")
}else{
    print("乗車できません")
}

# 6歳ではない(!)人
if (!6 == age){
    print("6歳ではない人です")
}else{
    print("6歳の人です")
}

 

forループ

Python

fruit=[“Apple","Orange","Melon","Grape","Pineapple"]

for val in fruit:
	print(val)

for val in fruit:
    if val == "Melon":
        break
    print(val)

R言語

fruit <- c("Apple","Orange","Melon","Grape","Pineapple")

for(val in fruit){
	print(val)
}

for(val in fruit){
    if(val=="Melon"){
	break
    }
    print(val)
}

for(val in fruit){
    if(val=="Melon"){
	next
    }
    print(val)
} 

 

whileループ

Python

num=1
while num<10:
    print(num)
    num += 1

R言語

num <- 1
while(num < 10){
    print(num)
    num = num+1
}