[Python]対話型実行環境でスクリプトを実行する
exec関数を使う。カレントディレクトリ(現在のフォルダー)にあるtest.pyを実行するのであれば、以下のようにする。
>>> exec(open("test.py").read())
« 2019年7月 | トップページ | 2019年9月 »
exec関数を使う。カレントディレクトリ(現在のフォルダー)にあるtest.pyを実行するのであれば、以下のようにする。
>>> exec(open("test.py").read())
gsub関数を正規表現を使用して取り除く。以下、例。
> s <- c("abc.def", "abc.def.ghi", "abc.def.ghi.jkl")
> s
[1] "abc.def" "abc.def.ghi" "abc.def.ghi.jkl"
> gsub("\\.[^.]+$", "", s)
[1] "abc" "abc.def" "abc.def.ghi"
> gsub("(\\.[^.]+){2}$", "", s)
[1] "abc.def" "abc" "abc.def"
Rには順列の総数nPrを求める関数が標準で搭載されていない。順列は以下のように書きかえることができるため、階乗を求めるfactorial関数を使用して計算する。
以下は、順列の総数 nPr を求める関数 permuを作成して計算した例。なお、n >= r、0! = 1であることに注意。n = r の場合は階乗そのものである。
5P2 = 20
5P3 = 60
10P3 = 720
> permu <- function(n, r) {factorial(n) / factorial(n - r)}
> permu(5, 2)
[1] 20
> permu(5, 3)
[1] 60
> permu(10, 3)
[1] 720
> permu(3, 3)
[1] 6
combn関数を使う。combn関数は、2番目の引数に与えた数値の数で組み合わせる、重複無しの組み合わせを返す。ただし、戻り値は行列であることに注意。
> n <- c(1, 3, 9)
> combn(n, 2)
[,1] [,2] [,3]
[1,] 1 1 3
[2,] 3 9 9
> s <- c("A", "B", "C")
> combn(s, 2)
[,1] [,2] [,3]
[1,] "A" "A" "B"
[2,] "B" "C" "C"
choose関数を使う。以下は5C2=10と7C3=35の計算例。
> choose(5, 2)
[1] 10
> choose(7, 3)
[1] 35
expand.grid関数を使う。数値型でも文字型でもかまわない。ただし、戻り値はデータフレームになることに注意。
> n <- c(1, 3, 9)
> expand.grid(n, n)
Var1 Var2
1 1 1
2 3 1
3 9 1
4 1 3
5 3 3
6 9 3
7 1 9
8 3 9
9 9 9
> s <- c("A", "B", "C")
> expand.grid(s, s)
Var1 Var2
1 A A
2 B A
3 C A
4 A B
5 B B
6 C B
7 A C
8 B C
9 C C
unname関数を使うと列名を削除した行列を返す。colnames関数でNULLを与えても削除できるが、こちらは指定した行列そのものの列名を削除することに注意。
> mx1 <- matrix(1:6, nrow = 3, ncol = 2)
> mx1
[,1] [,2]
[1,] 1 4
[2,] 2 5
[3,] 3 6
> colnames(mx1) <- c("x1", "x2")
> mx1
x1 x2
[1,] 1 4
[2,] 2 5
[3,] 3 6
> mx2 <- unname(mx1)
> mx2
[,1] [,2]
[1,] 1 4
[2,] 2 5
[3,] 3 6
> colnames(mx1) <- NULL
> mx1
[,1] [,2]
[1,] 1 4
[2,] 2 5
[3,] 3 6
print関数を使う。
>>> s1 = "ABC"
>>> s2 = "DEF"
>>> print("123abc")
123abc
>>> print(s1)
ABC
>>> print(s1); print(s2)
ABC
DEF
>>> print(s1, end = ""); print(s2)
ABCDEF
print関数は特にオプションを指定しないと、表示後に強制的に改行をすることに注意。改行をしたくない場合は、endオプションに長さ0の文字列(””)を指定する。
整数に変換する場合はint関数を、浮動小数点数(小数点以下の数値を含む数)に変換する場合はfloat関数を使う。
>>> s1 = "4"
>>> s2 = "5.4321"
>>> s3 = " -3.21 "
>>> s4 = "-8.9e-10"
>>> int(s1)
4
>>> float(s1)
4.0
>>> float(s2)
5.4321
>>> float(s3)
-3.21
>>> float(s4)
-8.9e-10
>>> int(s2)
Traceback (most recent call last):
File "", line 1, in ValueError: invalid literal for int() with base 10: '5.4321'
int関数に小数を表す文字列を与えると、エラーが発生する。文字列の前後に空白が含まれていてもかまわない。正負の記号も問題ない。指数表記をした文字列でもかまわない。