This is an R Markdown document. Markdown is a simple formatting syntax for authoring HTML, PDF, and MS Word documents. For more details on using R Markdown see http://rmarkdown.rstudio.com.

When you click the Knit button a document will be generated that includes both content as well as the output of any embedded R code chunks within the document. You can embed an R code chunk like this:

# 次の関数を実行してください。
Sys.Date()
## [1] "2015-06-15"
date()
## [1] "Mon Jun 15 09:32:42 2015"
# 次に、これまで習った関数を使って、2, 4, 5の3つの数字の平均を求めてください。

# 自分で関数を作る方法は次のとおり。
# function_name <- function(arg1, arg2){
#  # 必要な演算式を書く
#   # 戻る値を書く
# }
# 例えば、
my_first_function <- function(x) {
    x
}
# 実際に、my_first_function関数を使ってみてください。
# たとえば、my_first_function(“Hello World”)
#         my_first_function(“ なんでも “)
# 関数名だけを実行すると、その関数が表示されます。
my_first_function
## function(x) {
##     x
## }
# 次に、自分で平均を計算する関数 my_meanを作ってください。
# my_mean <- function(my_vector) {
  # コードを書く
  # 戻り値を書く 
# }
# ヒント1:sum()とlength()を使う。
# ヒント2:平均値 = sum()合計 割る length()数値の個数
# うまく動くとこんな結果になります。
#  my_mean(c(4, 5, 10))
#  [1] 6.333333

# 次の関数を定義してください。
increment <- function(number, by = 1){
     number + by
 }

# そして次のコードを実行してください。
increment(5)
## [1] 6
# 2つ目の引数を省略することができ、省略した場合は、1が割り当てられます(デフォルト値)。

# 次に余りを求める関数 remainderを作ってください。
# ただし、divisorのデフォルト値を2に設定してください。
# remainder <- function(num, divisor) {
  # コードを書く
  # 戻り値を書く 
# }
# ヒント:例えば 7 %% 4 は3となります。 %% が余り求める演算子。

# 実は関数の名前を引数にすることもできます。
# 次の事例では、関数add_two_numbers と multiply_two_numbers を定義し、
# さらに、それらの関数を使う関数 some_functionを定義します。
#
add_two_numbers <- function(num1, num2){
    num1 + num2
 }
#
multiply_two_numbers <- function(num1, num2){
    num1 * num2
 }
#
 some_function <- function(func){
    func(2, 4)
 }
# some_function(add_two_numbers) と
# some_function(multiply_two_numbers) を実行してください。
# さあ、練習問題です。
# 関数 evaluateを定義してください。funcが引数としての関数名、datは渡すデータです。
# evaluate <- function(func, dat){
  # Write your code here!
  # Remember: the last expression evaluated will be returned! 
# }
#    1. evaluate(sum, c(2, 4, 6)) では結果は 12
#    2. evaluate(median, c(7, 40, 9)) では結果は 9
#    3. evaluate(floor, 11.1) では結果は 11
#
# 関数 evaluate はできましたか。
#
evaluate <- function(func, dat){
    func(dat) 
  }
#
# その関数 evaluate を使ってベクトル c(1:100)の平均を求めてください。
# こんなこともできます。
evaluate(function(x){x+1}, 6)
## [1] 7
# このように関数名がない関数なので、アノニマス関数(匿名関数)と呼びます。
# さあ、アノニマス関数を作ってください。
# つぎのベクトル c(8, 4, 0)のうち、最初の要素を返すアノニマス関数を作って実行してください。
# evaluate(function(x) ????, c(8, 4, 0))
#
# 今度は、最後の要素を返すアノニマス関数を作って実行してください。
# evaluate(function(x) ????, c(8, 4, 0))
# 関数length を使って作ります。
# できましたか。
#
#
# 次の関数に移ります。関数 paste()を使ってみましょう。
# まず関数paste() について調べてみます。

?paste
# paste( )の引数は次の通りです。
# paste (..., sep = " ", collapse = NULL)
# 引数の最初に ... が定義されています。
# ... これが省略を表す引数「ドット・ドット・ドット」です。
# 関数 pasteは、次のように使います。

paste("R Programming", "is", "fun!")
## [1] "R Programming is fun!"
# 関数pasteを使って関数simon_saysを作ってみます。

simon_says <- function(...){
   paste("Simon says:",...)
 }

#
# 関数simon_says は、最初に"Simon says:”を付けて、あとは関数pasteと同じ働きをします。
# 例えば、、、、
simon_says("hello there", "my friends")
## [1] "Simon says: hello there my friends"
#次に関数pasteを使って"START” で始まり "STOP” で終る文字列を作る関数を作ってください。
# telegram <- function(...){
#  paste("START", ..., ???)
# }
#
# そして、関数telegramを使ってみましょう。
# 例えば、telegram(“It is a fine day.”, “How about tomorrow?”)
#
# 次の関数に移ります。
add_alpha_and_beta <- function(...){
  args <- list(...)           #まずlistの中にある省略値を、argsという変数に割り当てます。
  alpha <- args[["alpha"]]    #alphaとbetaという引数が指定されていることを想定しています。
  beta  <- args[["beta"]]     #[[ ]]によりリストの中にある値を取り出します。
  alpha + beta                # alpha と beta を足します。 
 }
# この関数add_alpha_and_betaを使うときには、alphaとbetaの引数(いずれも数値)を明示的に示すことを想定しているので、、、次のように使います。
add_alpha_and_beta(alpha=100, beta=200)
## [1] 300
#
# mad_libs <- function(...){
  # 同じように、次の関数pasteの引数、place, adjective, nounに対して値を代入するコードを書く。 
  # 次の関数paste()には変更はありません。
#   paste("News from", place, "today where", adjective, "students took to the streets in 
# protest of the new", noun, "being installed on campus.")
# }
# 実際に関数mad_libsを使ってみましょう。
#
# この演習の最後の関数です。
# 加減乗除の演算子は+, -, *, / を使いますが、このような演算子を作ってみましょう。
#
# その演算子は次の構造にします。
#      %[なにかアルファベットなどの文字列]% 
# 
# 例えば、こんな演算子の関数を作ってみましょう。
#
 "%mult_add_one%" <- function(left, right){  # {があることを忘れずに!
   left * right + 1
  }
#
# 実際に使ってみます。
4 %mult_add_one% 5
## [1] 21
# 21になったかな。
#
# さあ、今度は演算子の関数 %p% を作ってください。
#
#  "Good" %p% "job!"  を実行すると
#  "Good job!" となるように作ってください。
# ヒント:関数paste を使います。
#
# %p% <- function(){ # Remember to add arguments!
#   
# }
# できましたか。
# では、次の文字列、”I”, “love”, “R Programming!”を %p% を使ってくっつけてください。
#
# “I love R Programming!”となればこの演習は終わりです。
#