atwiki-logo
  • 新規作成
    • 新規ページ作成
    • 新規ページ作成(その他)
      • このページをコピーして新規ページ作成
      • このウィキ内の別ページをコピーして新規ページ作成
      • このページの子ページを作成
    • 新規ウィキ作成
  • 編集
    • ページ編集
    • ページ編集(簡易版)
    • ページ名変更
    • メニュー非表示でページ編集
    • ページの閲覧/編集権限変更
    • ページの編集モード変更
    • このページにファイルをアップロード
    • メニューを編集
    • 右メニューを編集
  • バージョン管理
    • 最新版変更点(差分)
    • 編集履歴(バックアップ)
    • アップロードファイル履歴
    • ページ操作履歴
  • ページ一覧
    • ページ一覧
    • このウィキのタグ一覧
    • このウィキのタグ(更新順)
    • このページの全コメント一覧
    • このウィキの全コメント一覧
    • おまかせページ移動
  • RSS
    • このウィキの更新情報RSS
    • このウィキ新着ページRSS
  • ヘルプ
    • ご利用ガイド
    • Wiki初心者向けガイド(基本操作)
    • このウィキの管理者に連絡
    • 運営会社に連絡(不具合、障害など)
R入門
  • ウィキ募集バナー
  • 目安箱バナー
  • 操作ガイド
  • 新規作成
  • 編集する
  • 全ページ一覧
  • 登録/ログイン
ページ一覧
R入門
  • ウィキ募集バナー
  • 目安箱バナー
  • 操作ガイド
  • 新規作成
  • 編集する
  • 全ページ一覧
  • 登録/ログイン
ページ一覧
R入門
  • 新規作成
  • 編集する
  • 登録/ログイン
  • 管理メニュー
管理メニュー
  • 新規作成
    • 新規ページ作成
    • 新規ページ作成(その他)
      • このページをコピーして新規ページ作成
      • このウィキ内の別ページをコピーして新規ページ作成
      • このページの子ページを作成
    • 新規ウィキ作成
  • 編集
    • ページ編集
    • ページ編集(簡易版)
    • ページ名変更
    • メニュー非表示でページ編集
    • ページの閲覧/編集権限変更
    • ページの編集モード変更
    • このページにファイルをアップロード
    • メニューを編集
    • 右メニューを編集
  • バージョン管理
    • 最新版変更点(差分)
    • 編集履歴(バックアップ)
    • アップロードファイル履歴
    • ページ操作履歴
  • ページ一覧
    • このウィキの全ページ一覧
    • このウィキのタグ一覧
    • このウィキのタグ一覧(更新順)
    • このページの全コメント一覧
    • このウィキの全コメント一覧
    • おまかせページ移動
  • RSS
    • このwikiの更新情報RSS
    • このwikiの新着ページRSS
  • ヘルプ
    • ご利用ガイド
    • Wiki初心者向けガイド(基本操作)
    • このウィキの管理者に連絡
    • 運営会社に連絡する(不具合、障害など)
  • atwiki
  • R入門
  • 数と式

R入門

数と式

最終更新:2024年12月27日 18:35

r-intro

- view
管理者のみ編集可

目次

  • 目次
  • 数
    • 簡単な計算
    • 数値型と数値リテラル
    • 文字列から数値を作成する
  • 切り上げ切り捨て
    • 小数点以下の切り捨てを行う
    • 小数点以下の切り上げを行う
    • 小数点以下の四捨五入を行う
    • 指定した桁で数値を丸める
  • n進数
    • n進数を10進数に変換する
    • 16進数で計算をする
    • 文字列の16進数を10進数に変換する
    • 任意の進数表記の文字列を任意の進数に変換する
    • 10進数を16進数に変換する
  • 様々な数
    • 複素数を使う
    • ランダムに作成された整数からなる数値型ベクトルを作成する

数

簡単な計算

計算は、演算子を使って簡単に行える。

> 1 + 2
[1] 3
> 3 - 4
[1] -1
> 5 * 6
[1] 30
> 7 / 8
[1] 0.875
> 9 + 1 + 2
[1] 12

演算子には優先順位がある。特に指定しない場合は優先順位が上位の演算子から計算される。例えば、現実の世界では+(足し算)より、×(掛け算)のほうが優先されるが、Rの世界でもそのようになる。その優先順位を変えたい場合は、優先して計算したい式を()「括弧」でくくる。

> 1 + 2 * 3
[1] 7
> 1 + (2 * 3)
[1] 7
> (1 + 2) * 3
[1] 9

数値型と数値リテラル

Rでよく使われる数値には2種類ある。

  1. 整数型
  2. 浮動小数点数型

1は整数を扱う。2はいわゆる実数を扱う。

整数型の数値ベクトルを作成するには、as.integer関数を使う。浮動小数点数型の数値ベクトルとはas.double関数を使う。

> n <- as.integer(3)
> d <- as.double(4.5)
> typeof(n)
[1] "integer"
> typeof(d)
[1] "double"

ここで、式や関数の引数で使う、3や4.5といった数値を表したものを数値リテラルという。3は整数リテラル、4.5は浮動小数点数リテラルという。だが、Rでは通常の計算は全て浮動小数点数で扱われるため、整数や浮動小数点数といったことを意識することはあまりない。

> typeof(3)
[1] "double"
> typeof(4.5)
[1] "double"

これまでベクトルのインデックスには演算子[ ]を使用して数値型ベクトルを与えて使用してきたが、与える数値は明示的に整数型にしなくてもよい。この場合は、与えた数値型ベクトルの要素は強制的に整数されてしまう(小数点以下が無視される)。

> s <- c("A", "B", "C")
> s[c(2, 3)]
[1] "B" "C"
> s[c(2.1, 3)]
[1] "B" "C"
> s[c(2.1, 3.9)]
[1] "B" "C"

これは浮動小数点数型を与えてもよいと理解せずに、ベクトルのインデックスには整数リテラルを与えるようにすること。

文字列から数値を作成する

as.numeric関数を使う。Rでは数値の扱いはデフォルトでは浮動小数点数(実数)のため、特に指定しない限り整数を表す文字列は浮動小数点数として扱われる。これを整数として扱うにはas.integer関数を使う。as.double関数はas.numeric関数と同じである。

> s <- c("0", "1", "-2", "3.14")
> print(s)
[1] "0"    "1"    "-2"   "3.14"
> as.numeric(s)
[1]  0.00  1.00 -2.00  3.14
> as.integer(s)
[1]  0  1 -2  3
> as.double(s)
[1]  0.00  1.00 -2.00  3.14
> as.numeric(c("0", "1", "-2", "3.14", "abc"))
[1]  0.00  1.00 -2.00  3.14    NA
 警告メッセージ: 
 強制変換により NA が生成されました

最後の例のとおり、数値を表さない文字列の場合は警告が発生し、数値ではなく強制的にNAに変換される。

切り上げ切り捨て

小数点以下の切り捨てを行う

trunc関数を使う。

> sprintf("%.5f", trunc(c(1.23, -1.23, 0.1, -0.1)))
[1] "1.00000"  "-1.00000" "0.00000"  "-0.00000"

似たような機能を持つfloorという関数もある。こちらは、その数より小さい最大の整数を返す。

> sprintf("%.5f", floor(c(1.23, -1.23, 0.1, -0.1)))
[1] "1.00000"  "-2.00000" "0.00000"  "-1.00000"

小数点以下の切り上げを行う

ceiling関数を使う。厳密には、その数より大きい最小の整数を返すことに注意。

> sprintf("%.5f", ceiling(c(1.23, -1.23, 0.1, -0.1)))
[1] "2.00000"  "-1.00000" "1.00000"  "-0.00000"

小数点以下の四捨五入を行う

round関数を使う。JIS規格 (JIS Z 8401) による偶数丸めであることに注意。

> sprintf("%.5f", round(c(1.3, 1.4, 1.5, 2.3, 2.4, 2.5)))
[1] "1.00000" "1.00000" "2.00000" "2.00000" "2.00000" "2.00000"

指定した桁で数値を丸める

round関数を使う。第一引数には対象となる数を、第二引数には丸める判定を行う小数点以下第何位の数かを指定する。

> sprintf("%.5f", round(c(1.23, 1.24, 1.25, 2.23, 2.24, 2.25), 1))
[1] "1.20000" "1.20000" "1.20000" "2.20000" "2.20000" "2.20000"

n進数

n進数を10進数に変換する

strtoi関数を使う。第一引数に変換したいn進数を文字列で、第二引数に変換したいn進数のnの値を整数で与える。

> strtoi(c("1", "10", "100"), 2L)
[1] 1 2 4
> strtoi(c("1", "10", "100"), 10L)
[1]   1  10 100
> strtoi(c("1", "10", "100"), 16L)
[1]   1  16 256
> strtoi(c("f", "ff", "fff"), 10L)
[1] NA NA NA
> strtoi(c("f", "ff", "fff"), 16L)
[1]   15  255 4095
> mode(strtoi(c("1", "10", "100"), 16L))
[1] "numeric"
> class(strtoi(c("1", "10", "100"), 16L))
[1] "integer"

変換できない文字列の場合はNAが返される。戻り値は数値型(整数)。

16進数で計算をする

数値リテラルに0xを付けて計算するかas.hexmode関数を使う。0xを付けて計算をすると戻り値は10進数かつ数値型。as.hexmode関数の戻り値を含めると、戻り値は16進数かつ文字列になることに注意。

> 9 + 2
[1] 11
> 0x9 + 0x2
[1] 11
> 0x9 + 2
[1] 11
> 0xb
[1] 11
> as.hexmode("9") + as.hexmode("2")
[1] "b"
> as.hexmode("9") + 2
[1] "b"

文字列の16進数を10進数に変換する

as.integer関数とas.hexmode関数を組み合わせる。as.hexmode関数は引数に与えた文字列をhexmodeという種類の値に変換し、as.integer関数で整数に変換している。

> as.hexmode("f")
[1] "f"
> class(as.hexmode("f"))
[1] "hexmode"
> as.integer(as.hexmode("f"))
[1] 15
> as.integer(as.hexmode("ff"))
[1] 255
> as.integer(as.hexmode("ff")) + 1
[1] 256

任意の進数表記の文字列を任意の進数に変換する

strtoi関数を使う。baseオプションに変換したい進数の値(2進数なら2、10進数なら10、・・・)を与える。

> strtoi("01111", base = 10)
[1] 1111
> strtoi("01111", base = 2)
[1] 15
> strtoi("f", base = 16)
[1] 15
> strtoi("ff", base = 16)
[1] 255

10進数を16進数に変換する

as.hexmode関数を使う。ベクトルを扱うことができる。戻り値は画面表示では文字列に見えるが、整数であることに注意。

> as.hexmode(0:15)
 [1] "0" "1" "2" "3" "4" "5" "6" "7" "8" "9" "a" "b" "c" "d" "e" "f"
> as.hexmode(249:255)
[1] "f9" "fa" "fb" "fc" "fd" "fe" "ff"
> as.hexmode(13:16)
[1] "0d" "0e" "0f" "10"
> as.hexmode(13:16) + 1
[1] "0e" "0f" "10" "11"
> typeof(as.hexmode(13:16))
[1] "integer"

様々な数

複素数を使う

complex型ベクトルを使う。complex関数で簡単に作ることができる。第一引数には作成するベクトルの個数、第二引数には実部の値、第三引数には虚部の値を与える。

以下は、2+3iを作成した例。

> ri <- complex(1, 2, 3)
> print(ri)
[1] 2+3i

四則演算や累乗は、実数と同じ演算子を使用して簡単に計算することができる。

> ri1 <- complex(1, 3, -2)
> ri2 <- complex(1, 2, 5)
> print(ri1)
[1] 3-2i
> print(ri2)
[1] 2+5i
> print(ri1 + ri2)
[1] 5+3i
> print(ri1 - ri2)
[1] 1-7i
> print(ri1 * ri2)
[1] 16+11i
> ri <- complex(1, 1, 1)
> print(ri)
[1] 1+1i
> print(ri ^ 4)
[1] -4+0i

戻り値は複素数型。複素数型から実部だけを取り出すにはRe関数を、虚部だけを取り出すにはIm関数を使う。これら関数の戻り値はそれぞれ実数型。

> ri <- c(complex(1, 2, 3), complex(1, 4, 5))
> print(ri)
[1] 2+3i 4+5i
> class(ri)
[1] "complex"
> Re(ri)
[1] 2 4
> Im(ri)
[1] 3 5
> class(Re(ri))
[1] "numeric"
> class(Im(ri))
[1] "numeric"
> Re(ri) + Im(ri)
[1] 5 9

ランダムに作成された整数からなる数値型ベクトルを作成する

runif関数とtrunc関数を組み合わせて使う。runif関数はrunif(n, a, b)とすると、a < x < bなるxがn個からなる数値型ベクトルを返す。trunc関数は引数に与えた数値の小数点以下を切り捨てて返す関数(正数も負数も0に寄せる方向に切り捨てる)。

runif関数のヘルプには以下のような記述があり、指定した範囲は原則開区間(両端の値を含まない区間)になることに注意。

runif will not generate either of the extreme values unless max = min or max-min is small compared to min, and in particular not for the default arguments.

以下は、無作為抽出により0~10の11個の整数からなる、要素数が5の数値型ベクトルを作成した例。runif関数の第1引数に指定した数だけ乱数が作成される。上記のとおりrunif関数に指定の範囲は開区間のため、runif関数の第3引数には1加えた11を指定していることに注意。最後はtable関数で100万個の整数を作成した際の度数分布表を表示しており、0~10から均等に抽出されていることがわかる。

> floor(runif(5, 0, 11))
[1]  7  8 10  4  9
> floor(runif(5, 0, 11))
[1] 4 3 4 0 6
> floor(runif(5, 0, 11))
[1] 3 4 5 5 9
> floor(runif(5, 0, 11))
[1]  3  0 10  7  3
> table(floor(runif(1000000, 0, 11)))
    0     1     2     3     4     5     6     7     8     9    10 
91093 90902 90937 90639 91052 90885 90969 90530 91507 90554 90932
「数と式」をウィキ内検索
LINE
シェア
Tweet
R入門
記事メニュー

メニュー

  • トップページ
  • Rとは
  • Rを使ってみる
  • 画面出力と入力
  • 変数とオブジェクト
  • ベクトル
  • 演算子と制御構文
  • 数と式
  • 文字と文字列
  • 正規表現
  • 日付と時刻
  • データフレーム
  • tidyverse
  • リスト
  • ファイルの入出力
  • ファイル・ディレクトリ
  • 実行とデバッグ
  • 数学
  • 行列
  • 関数
  • 統計学
  • 統計解析
  • 数値計算
  • 応用
  • 時系列解析
  • 地理空間情報
  • Rの操作
  • データベース
  • パッケージ

  • 環境
  • インターネット
  • 作図
  • 画像

  • 本の計算を再現
  • セイバーメトリクス
  • その他


ここを編集
記事メニュー2

更新履歴

取得中です。

ここを編集
人気記事ランキング
  1. その他
  2. リスト
  3. 日付と時刻
  4. 地理空間情報
  5. ファイル・ディレクトリ
  6. Rによるセイバーメトリクス入門(技術評論社)
  7. 数学
  8. セイバーメトリクス
もっと見る
最近更新されたページ
  • 1日前

    リスト
  • 6日前

    行列
  • 9日前

    tidyverse
  • 47日前

    インターネット
  • 58日前

    日付と時刻
  • 58日前

    応用
  • 58日前

    文字と文字列
  • 75日前

    変数とオブジェクト
  • 118日前

    その他
  • 119日前

    画像
もっと見る
人気記事ランキング
  1. その他
  2. リスト
  3. 日付と時刻
  4. 地理空間情報
  5. ファイル・ディレクトリ
  6. Rによるセイバーメトリクス入門(技術評論社)
  7. 数学
  8. セイバーメトリクス
もっと見る
最近更新されたページ
  • 1日前

    リスト
  • 6日前

    行列
  • 9日前

    tidyverse
  • 47日前

    インターネット
  • 58日前

    日付と時刻
  • 58日前

    応用
  • 58日前

    文字と文字列
  • 75日前

    変数とオブジェクト
  • 118日前

    その他
  • 119日前

    画像
もっと見る
ウィキ募集バナー
新規Wikiランキング

最近作成されたWikiのアクセスランキングです。見るだけでなく加筆してみよう!

  1. R.E.P.O. 日本語解説Wiki
  2. シュガードール情報まとめウィキ
  3. SYNDUALITY Echo of Ada 攻略 ウィキ
  4. ガンダムGQuuuuuuX 乃木坂46部@wiki
  5. ありふれた職業で世界最強 リベリオンソウル @ ウィキ
  6. ドタバタ王子くん攻略サイト
  7. パズル&コンクエスト(Puzzles&Conquest)攻略Wiki
  8. 機動戦士ガンダム EXTREME VS.2 INFINITEBOOST wiki
  9. Merge Cooking 攻略 @ ウィキ
  10. アサシンクリードシャドウズ@ ウィキ
もっと見る
人気Wikiランキング

atwikiでよく見られているWikiのランキングです。新しい情報を発見してみよう!

  1. アニヲタWiki(仮)
  2. ストグラ まとめ @ウィキ
  3. ゲームカタログ@Wiki ~名作からクソゲーまで~
  4. 初音ミク Wiki
  5. 検索してはいけない言葉 @ ウィキ
  6. Grand Theft Auto V(グランドセフトオート5)GTA5 & GTAオンライン 情報・攻略wiki
  7. 機動戦士ガンダム バトルオペレーション2攻略Wiki 3rd Season
  8. 発車メロディーwiki
  9. SDガンダム ジージェネレーションクロスレイズ 攻略Wiki
  10. 鬼レンチャンWiki
もっと見る
全体ページランキング

最近アクセスの多かったページランキングです。話題のページを見に行こう!

  1. 魔獣トゲイラ - バトルロイヤルR+α ファンフィクション(二次創作など)総合wiki
  2. 参加者一覧 - ストグラ まとめ @ウィキ
  3. ロスサントス警察 - ストグラ まとめ @ウィキ
  4. 仄々山 すごす - ストグラ まとめ @ウィキ
  5. ロスサントス救急救命隊 - ストグラ まとめ @ウィキ
  6. ボイラ テンガリン - ストグラ まとめ @ウィキ
  7. キラ・メキーラ - ストグラ まとめ @ウィキ
  8. 無馬 かな - ストグラ まとめ @ウィキ
  9. 没作品 - アニヲタWiki(仮)
  10. 一夫多妻/ハーレム - アニヲタWiki(仮)
もっと見る

  • このWikiのTOPへ
  • 全ページ一覧
  • アットウィキTOP
  • 利用規約
  • プライバシーポリシー

2019 AtWiki, Inc.