1
0
mirror of https://github.com/adambard/learnxinyminutes-docs.git synced 2025-01-18 05:59:14 +01:00

Merge pull request #685 from ahirose/master

[R/ja-JP] [bash/ja-JP][bash/en]Updated the Japanese comment to be more understandable for R, new translation for the bash document, and a small correction of the English bash one.
This commit is contained in:
Adam Bard 2014-07-23 15:09:22 +02:00
commit 9d3a1a41ac
3 changed files with 231 additions and 58 deletions

View File

@ -6,6 +6,7 @@ contributors:
- ["Darren Lin", "https://github.com/CogBear"]
- ["Alexandre Medeiros", "http://alemedeiros.sdf.org"]
- ["Denis Arh", "https://github.com/darh"]
- ["akirahirose", "https://twitter.com/akirahirose"]
filename: LearnBash.sh
---
@ -155,14 +156,14 @@ bar ()
foo "My name is" $NAME
# There are a lot of useful commands you should learn:
tail -n 10 file.txt
# prints last 10 lines of file.txt
head -n 10 file.txt
tail -n 10 file.txt
# prints first 10 lines of file.txt
sort file.txt
head -n 10 file.txt
# sort file.txt's lines
uniq -d file.txt
sort file.txt
# report or omit repeated lines, with -d it reports them
cut -d ',' -f 1 file.txt
uniq -d file.txt
# prints only the first column before the ',' character
cut -d ',' -f 1 file.txt
```

172
ja-jp/bash-jp.html.markdown Normal file
View File

@ -0,0 +1,172 @@
---
category: tool
tool: bash
contributors:
- ["Max Yankov", "https://github.com/golergka"]
- ["Darren Lin", "https://github.com/CogBear"]
- ["Alexandre Medeiros", "http://alemedeiros.sdf.org"]
- ["Denis Arh", "https://github.com/darh"]
translators:
- ["akirahirose", "https://twitter.com/akirahirose"]
filename: LearnBash-jp.sh
lang: ja-jp
---
Bash はunixシェルの1つです。GNUオペレーションシステムのシェルとして配布されています。
LinuxやMac OS Xの、デフォルトシェルにもなっています。
以下にある例は、ほぼ全部シェルスクリプトの一部として使えます。また、一部はそのままシェルから実行できます。
[ちゃんとした説明は、こちらをどうぞ](http://www.gnu.org/software/bash/manual/bashref.html)
```bash
#!/bin/bash
# 最初の行はShebang(シェバング、シバン)というもので、システムに対して何を使って実行するのかを教えるためのものです
# ちゃんとした説明、こちらをどうぞ: http://en.wikipedia.org/wiki/Shebang_(Unix)
# 既にお気づきのように、コメント行は#で始まります. Shebangもコメントです
# まずは Hello world です
echo Hello world!
# コマンド毎に改行を入れるか、セミコロンで区切ります
echo 'This is the first line'; echo 'This is the second line'
# 変数の宣言はこのようにやります
VARIABLE="Some string"
# が、以下のようにやってはダメです
VARIABLE = "Some string"
# このように空白を入れて書くと、Bash はVARIABLEを実行するべきコマンドとみなし、実行します。
# そして、VARIABLEというコマンドはないはずなので、エラーになります
# 変数の使い方
echo $VARIABLE
echo "$VARIABLE"
echo '$VARIABLE'
# 変数の値(中身)を使わず、変数名だけを使うとき(代入するときや渡すときなど)は、$なしで変数名を書いてください
# 変数の値(中身)を使うときは、$をつけます
# 上記例の最後にある、' (シングルクォート) で囲んだ場合は、変数の値は表示されません!
# 変数値の文字列置換
echo ${VARIABLE/Some/A}
# 最初に出てくる "Some" を "A" で置換します
# 変数値の一部を取り出します
echo ${VARIABLE:0:7}
# 最初の7文字だけを取り出します
# デフォルトの変数値設定(訳注:シェル実行時に引数で変数値を設定できるが、設定しなかった場合の値を指定できる)
echo ${FOO:-"DefaultValueIfFOOIsMissingOrEmpty"}
# 上記は、FOO番目の引数がnullだったとき(FOO番目=)や、空文字が指定されたとき(FOO番目="")に、変数に0を入れます
# ( 当然ですが、引数に0を指定したとき(FOO番目=0) も、0は入ります
# 組込み変数
# 以下のような便利な組込み変数があります
echo "Last program return value: $?"
echo "Script's PID: $$"
echo "Number of arguments: $#"
echo "Scripts arguments: $@"
echo "Scripts arguments seperated in different variables: $1 $2..."
# 入力値の読み込み
echo "What's your name?"
read NAME # 新しく変数を宣言する必要はないことに注意
echo Hello, $NAME!
# 普通のif文も使えます
# 利用できる判定条件については、'man test' で参照してください
if [ $NAME -ne $USER ]
then
echo "Your name is your username"
else
echo "Your name isn't your username"
fi
# 他にも、条件判定ができます
echo "Always executed" || echo "Only executed if first command fails"
echo "Always executed" && echo "Only executed if first command does NOT fail"
# 数式は以下のように書きます
echo $(( 10 + 5 ))
# 他のプログラム言語とは違ってbashはシェルなので、現在いるディレクトリ位置が異なると、異なる結果になります
# lsコマンドで、現在いるディレクトリにあるファイルと、ディレクトリのリストが取得できます
ls
# これらのコマンドには、実行オプションがいろいろあります
ls -l # ファイルとディレクトリのリストを行に分けて表示します
# あるコマンド実行による返値を、次のコマンドの入力値としてつかえます
# 例えばですが、lsコマンドの返値を、grepコマンドによって指定したルールに基づいてフィルタできます。
# 以下は、現在いるディレクトリにある、.txtファイルのリストを表示する例です
ls -l | grep "\.txt"
# コマンドに対する入力元や出力先、またエラー出力先などを変更できます
python2 hello.py < "input.in"
python2 hello.py > "output.out"
python2 hello.py 2> "error.err"
# 出力先として指定したファイルが既に存在する場合は、上書きされます
# もしもファイルに追記したい場合は、代わりに">>" を使ってください
# コマンド文中で、$()内に別コマンドを入れると、その別コマンドの返値をコマンド文の一部として使う事ができます
# 次のコマンドは、現在いるディレクトリにあるファイルの数を表示します
echo "There are $(ls | wc -l) items here."
# バッククォート(backticks) `` でも同じことができますが、入れ子にはできません
# そのため、$()がお勧めです
echo "There are `ls | wc -l` items here."
# BashはJavaやC++のように、case文による分岐ができます
case "$VARIABLE" in
#分岐条件として使いたいパターンを並べてください
0) echo "There is a zero.";;
1) echo "There is a one.";;
*) echo "It is not null.";;
esac
# 指定した回数、処理を繰り返し
# 変数の値 $VARIABLE が3回表示されます
for VARIABLE in {1..3}
do
echo "$VARIABLE"
done
# while ループです
while [true]
do
echo "loop body here..."
break
done
# 関数の定義もできます
function foo ()
{
echo "Arguments work just like script arguments: $@"
echo "And: $1 $2..."
echo "This is a function"
return 0
}
# 以下のように、もっと簡単な書き方もあります
bar ()
{
echo "Another way to declare functions!"
return 0
}
# 自作関数を呼びます
foo "My name is" $NAME
# 他にもいろいろと、知っておくと便利なコマンドがあります
# file.txtの最後10行を表示します
tail -n 10 file.txt
# file.txtの最初10行を表示します
head -n 10 file.txt
# file.txt's の行を並び替えます
sort file.txt
# 重複している行を表示するか、削除できます。-dオプションをつけると、表示します
uniq -d file.txt
# 1行ごとに、','が最初に出てくる前の部分を表示します
cut -d ',' -f 1 file.txt
```

View File

@ -11,18 +11,18 @@ lang: ja-jp
R は統計計算用の言語です。
データの取得やクリーニング、統計処理やグラフ作成をするために使える、たくさんのライブラリがあります。また、LaTeX文書からRコマンドを呼び出すこともできます
データの取得やクリーニング、統計処理やグラフ作成をするために便利な、たくさんのライブラリがあります。また、LaTeX文書からRコマンドを呼び出すこともできます
```python
# コメント行は、#で開始します
# コメントを複数の行に分けたい場合は
# このように、コメント行を複数連続させるとできます
# 複数行をまとめてコメントにすることはできないので
# コメントを複数の行に分けたい場合、このように、単に毎行をコメントにしてください
# WindowsやMacでは、 COMMAND-ENTERで1行のコマンド実行ができます
# WindowsやMacでは、 COMMAND-ENTERで、コマンドを1行実行できます
@ -79,7 +79,7 @@ stem(rivers)
# 36 | 1
stem(log(rivers)) # このデータは、正規分布でも対数正規分布でもないので注意!
stem(log(rivers)) # このデータは、正規分布でも対数正規分布でもないので注意!
# 特に正規分布原理主義のみなさん
@ -175,8 +175,8 @@ rnorm(9)
# ここからは、プログラミングをつかうチュートリアルです
# この節ではRで重要なデータ型の、整数型、数字型、文字型、論理型と因子型をつかいます
# 他にもいろいろありますが、まずは最小限必要な、これらから始めましょう
# この節ではRで重要なデータ型(データクラス)の、整数型、数字型、文字型、論理型と因子(ファクター)型をつかいます
# 他にもいろいろありますが、これらの必要最小限なものから始めましょう
# 整数型
@ -184,7 +184,7 @@ rnorm(9)
5L # 5
class(5L) # "integer"
# (?class を実行すると、class()関数について、さらなる情報が得られます)
# Rでは、この5Lのような単一の値は、長さ1のベクトルとして扱われます
# Rでは、この5Lのような1つの値は、長さ1のベクトルとして扱われます
length(5L) # 1
# 整数型のベクトルはこのようにつくります
c(4L, 5L, 8L, 3L) # 4 5 8 3
@ -221,7 +221,7 @@ class(-Inf) # "numeric"
# 不正な計算は "not-a-number"になります
0 / 0 # NaN
class(NaN) # "numeric"
# 長さが1より大きなベクター同士で計算ができます
# 長さが1より大きなベクター同士の計算もできます
# どちらかが長い場合、短い方は何度も繰り返して使われます
c(1,2,3) + c(1,2,3) # 2 4 6
@ -263,18 +263,18 @@ c('Z', 'o', 'r', 'r', 'o') == "Zorro" # FALSE FALSE FALSE FALSE FALSE
c('Z', 'o', 'r', 'r', 'o') == "Z" # TRUE FALSE FALSE FALSE FALSE
# ファクター
# ファクタークラスは、カテゴリカルデータ用のクラスです
# ファクターは、子供の学年のように順序がつけられるものか、性別のように順序がないものがあります
# 因子(ファクター
# 因子型は、カテゴリカルデータ用の型です
# 因子には、子供の学年のように順序がつけられるものか、性別のように順序がないものがあります
factor(c("female", "female", "male", "NA", "female"))
# female female male NA female
# Levels: female male NA
# "levels" は、カテゴリカルデータがとりうる値を返します
levels(factor(c("male", "male", "female", "NA", "female"))) # "female" "male" "NA"
# ファクターベクターの長さが1ならば、そのlevelも1です
# 因子ベクターの長さが1ならば、そのlevelも1です
length(factor("male")) # 1
length(levels(factor("male"))) # 1
# ファクターは、この後で紹介するデータフレーム(というデータ型)内で、よくみられます
# 因子型は、この後で紹介するデータフレーム(というデータ型)内で、よくみられます
data(infert) # "Infertility after Spontaneous and Induced Abortion"
levels(infert$education) # "0-5yrs" "6-11yrs" "12+ yrs"
@ -379,7 +379,7 @@ jiggle(5) # 5±ε. set.seed(2716057)をすると、jiggle(5)==5.005043
# 1次元
# まずは基本からです。すでにご存じベクターからです
# まずは基本からです。ご存じベクターからです
vec <- c(8, 9, 10, 11)
vec # 8 9 10 11
# 特定の要素を、[角括弧]による指定で取り出せます
@ -400,7 +400,7 @@ any(vec == 10) # TRUE
vec[6] # NA
# ベクターの長さは、length()で取得できます
length(vec) # 4
# ベクター全体、または部に対して、操作ができます
# ベクター全体、または1部に対して、操作ができます
vec * 4 # 16 20 24 28
vec[2:3] * 5 # 25 30
any(vec[2:3] == 8) # FALSE
@ -411,7 +411,7 @@ sd(vec) # 1.290994
max(vec) # 11
min(vec) # 8
sum(vec) # 38
# 他にも、ベクター関連ではいろいろな関数があります
# 他にも、ベクター関連ではいろいろな関数があります。以下はベクターをつくるための方法です
5:15 # 5 6 7 8 9 10 11 12 13 14 15
seq(from=0, to=31337, by=1337)
# =>
@ -422,7 +422,7 @@ seq(from=0, to=31337, by=1337)
# 2次元配列 (すべての値が同じ型の場合)
# 同じ型の値が含まれる配列は、このように作れます
# 同じ型の値が含まれる2次元配列は、このように作れます
mat <- matrix(nrow = 3, ncol = 2, c(1,2,3,4,5,6))
mat
# =>
@ -430,7 +430,7 @@ mat
# [1,] 1 4
# [2,] 2 5
# [3,] 3 6
# ベクターとは違い、配列のクラス名は"matrix"です。
# ベクターとは違い、2次元配列の型名は"matrix"です。
class(mat) # => "matrix"
# 最初の行
mat[1,] # 1 4
@ -440,7 +440,7 @@ mat[1,] # 1 4
mat[3,2] # 6
# 配列全体を転置します
# 2次元配列全体を転置します
t(mat)
# =>
# [,1] [,2] [,3]
@ -448,7 +448,7 @@ t(mat)
# [2,] 4 5 6
# 配列の積
# 2次元配列の積
mat %*% t(mat)
# =>
# [,1] [,2] [,3]
@ -457,7 +457,7 @@ mat %*% t(mat)
# [3,] 27 36 45
# cbind() は、複数のベクターを、別々の列に並べて配列を作ります
# cbind() は、複数のベクターを、別々の列に並べて2次元配列を作ります
mat2 <- cbind(1:4, c("dog", "cat", "bird", "dog"))
mat2
# =>
@ -467,19 +467,19 @@ mat2
# [3,] "3" "bird"
# [4,] "4" "dog"
class(mat2) # matrix
# ここでいま一度、型について注意してください!
# 配列にある値は、すべて同じ型にする必要があります。そのため、すべて文字型に変換されています
# ここでいま1度、2次元配列内の型について注意してください!
# 2次元配列にある値は、すべて同じ型にする必要があります。そのため、すべて文字型に変換されています
c(class(mat2[,1]), class(mat2[,2]))
# rbind() は、複数のベクターを、別々の行に並べて配列を作ります
# rbind() は、複数のベクターを、別々の行に並べて2次元配列を作ります
mat3 <- rbind(c(1,2,4,5), c(6,7,0,4))
mat3
# =>
# [,1] [,2] [,3] [,4]
# [1,] 1 2 4 5
# [2,] 6 7 0 4
# 全ての値は同じ型になります。この例の場合は、強制変換がされないのでよかったです
# 全ての値は同じ型になります。上記例は幸い、強制変換がされないものでした
# 2次元配列 (いろいろな型を含む場合)
@ -506,16 +506,16 @@ students
# 6 Ginny -1 G
class(students$year) # "numeric"
class(students[,3]) # "factor"
# 次元の数をみます
# 行と列の数をみます
nrow(students) # 6
ncol(students) # 3
dim(students) # 6 3
# このdata.frame() 関数は、デフォルトでは文字列ベクターをファクターのベクターに変換します
# このdata.frame() 関数は、デフォルトでは文字列ベクターを因子ベクターに変換します
# stringsAsFactors = FALSE に設定してからデータフレームを作成すると、変換されません
?data.frame
# データフレームの部を取り出すには、いろいろな(変な)、似たような方法があります
# データフレームの1部を取り出すには、いろいろな(変な)、似たような方法があります
students$year # 3 2 2 1 0 -1
students[,2] # 3 2 2 1 0 -1
students[,"year"] # 3 2 2 1 0 -1
@ -594,7 +594,7 @@ students
# 6: Draco 0 S
# 行を消す場合は、データテーブルから、一部を除くことによってできます
# データテーブルから行を消す場合は、以下のように除く行を指定すればできます
students[studentName != "Draco"]
# =>
# house studentName year
@ -603,7 +603,7 @@ students[studentName != "Draco"]
# 3: G Ginny -1
# 4: H Cedric 3
# 5: R Cho 1
# データフレームの場合も同様
# データフレームの場合も同様です
students <- as.data.frame(students)
students[students$house != "G",]
# =>
@ -616,15 +616,15 @@ students[students$house != "G",]
# 多次元 (すべての値が同じ型の場合)
# 配列N次元の表を作ります
# すべての値は同じ型にする必要があります
# この方法で、配列のような2次元表も作成可能です
# 配列を並べて、N次元の表を作ります
# 配列なので、すべての値は同じ型にする必要があります
# ちなみに、以下のようにすれば2次元配列・2次元表も作成可能です
array(c(c(1,2,4,5),c(8,9,3,6)), dim=c(2,4))
# =>
# [,1] [,2] [,3] [,4]
# [1,] 1 4 8 3
# [2,] 2 5 9 6
# 配列から3次元行列を作ることもできます
# 2次元配列を並べて、3次元配列を作ることもできます
array(c(c(c(2,300,4),c(8,9,0)),c(c(5,60,0),c(66,7,847))), dim=c(3,2,2))
# =>
# , , 1
@ -642,7 +642,7 @@ array(c(c(c(2,300,4),c(8,9,0)),c(c(5,60,0),c(66,7,847))), dim=c(3,2,2))
# [3,] 0 847
# リスト(多次元、不完全なのか複数の型が使われているもの)
# リスト(多次元、不完全または複数の型が使われているもの)
# ついにRのリストです
@ -656,13 +656,13 @@ list1[[1]] # また別の方法
# =>
# [1] 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 31 32 33
# [34] 34 35 36 37 38 39 40
# 他のベクターと同じく、部を取り出すことができます
# 他のベクターと同じく、1部を取り出すことができます
list1$price[4]
# リストは、Rで番効率的なデータ型ではありません
# なにか特別な理由がない限りは、データフレームを使い続けるべきです
# リストは、線形回帰関数の返値として、しばしば使われます
# リストは、Rで1番効率的なデータ型ではありません
# 特別な理由がない限りは、リストの代わりにデータフレームを使うべきです
# リストは、線形回帰関数の返値として、しばしば使われています
##################################################
@ -677,18 +677,18 @@ mat
# [1,] 1 4
# [2,] 2 5
# [3,] 3 6
# apply(X, MARGIN, FUN) は、行列Xの行MARGIN=1)または列MARGIN=2)に対して、関数FUNを実行します
# RでこのようにXの全行か全列に関数を実行すると、forやwhileループを使うより、遥かに速くできま
# apply(X, MARGIN, FUN) は、行列Xの行MARGIN=1で指定)または列MARGIN=2で指定)に対して、関数FUNを実行します
# Rで、このように指定してXの全行または全列に関数を実行するのは、forやwhileループを使うよりも、遥かに速いで
apply(mat, MAR = 2, jiggle)
# =>
# [,1] [,2]
# [1,] 3 15
# [2,] 7 19
# [3,] 11 23
# 他にも関数があります。?lapply, ?sapply で確認してみてください
# 他にも便利な関数があります。?lapply, ?sapply で確認してみてください
# このやり方がちょっとややこしいという事は、みんな同意です。なので、あまり怖がりすぎないでください
# apply()系関数の使い方は、ちょっとややこしいです(みんなそう思ってます)。なので、あまり怖がりすぎないでください
# plyr パッケージは、*apply() 系の関数を置き換えて(さらに改善して)いこうとしています
@ -731,25 +731,25 @@ write.csv(pets, "pets2.csv") # 新しくcsvファイルを作ります
#########################
# 組み込みのプロット関数で
# 散布図です!
# Rに組込まれているプロット関数をつかいま
# 散布図!
plot(list1$time, list1$price, main = "fake data")
# 回帰図です!
# 回帰図!
linearModel <- lm(price ~ time, data = list1)
linearModel # outputs result of regression
# 回帰直線を既存の図上に引きます
abline(linearModel, col = "red")
# いろいろな診断方法を見ましょう
# いろいろな散布図をつくって、確認できます
plot(linearModel)
# ヒストグラムです
# ヒストグラム!
hist(rpois(n = 10000, lambda = 5), col = "thistle")
# 棒グラフです
# 棒グラフ!
barplot(c(1,4,5,1,2), names.arg = c("red","blue","purple","green","yellow"))
# GGPLOT2
# 上記よりも、もっときれいな図を描くこともできます
# より多くよい図を描くために、ggplot2 パッケージを使ってみましょう
# 上記の組込み関数を使うよりも、もっときれいな図を描くこともできます
# ggplot2 パッケージを使って、より多くのよい図を描いてみましょう
install.packages("ggplot2")
require(ggplot2)
?ggplot2
@ -772,4 +772,4 @@ pp + geom_point()
* RとR GUIはこちら [http://www.r-project.org/](http://www.r-project.org/)
* [RStudio](http://www.rstudio.com/ide/) はまた別のGUIです
* [RStudio](http://www.rstudio.com/ide/) 別のGUI