8.2 カマグラ(No.31〜No.40)
8.2 カマグラ (No.31~No.40)の場合
8.2.31
subset
機能
subset
は、対話的な使用における利便性を提供することを目的としています。関数で使用すると、しばしば不便や苦痛を感じることがあります。関数を使用する場合は、添え字を使用するのではなく
subset
.
患者さん 先生、これをやると痛いんです。
ドクター それなら、こんなことしないでください。
これは
subset
の動作例です。
> xdf5 <- data.frame(R=1:2, J=3:4, E=5:6, K=7:8)
> subset(xdf5, select=J:K)
J E K
1 3 5 7
2 4 6 8
> subset(xdf5, select=-E)
R J K
1 1 3 7
2 2 4 8
パラメータを使用すると
非常に
非標準の
":"
と
"-"
演算を行うことができます。これにより、インタラクティブな使用における利便性とスピードがもたらされます。このようなトリックが他の文脈でも使えると期待することは、ユーザーにとって重大な危険である。インタラクティブな用途であっても
J:K
をデータフレーム内の順序ではなく、アルファベットに従うようにすることも非常に危険である。
なお、1列しか選択されていない場合でも
subset
はデータボックスを返します。
8.2.32
subset
の中に
=
と
==
次の2つのコマンドには、非常に大きな違いがあります。
subset(Theoph, Subject = 1)
そして
subset(Theoph, Subject == 1)
最後が期待するもので、前者は何もしません。
8.2.33 セパレート
sample
選択
機能
sample
には、いつも役に立つとは限らない機能があります。その第一引数には、サンプルの開始から終了までの項目を指定するか、選択するデータ中の数値を指定することができます。ここで摩擦が生じるのです。
> sample(c(4.9, 8.6), 9, replace=TRUE)
[1] 4.9 4.9 8.6 4.9 8.6 4.9 8.6 4.9 8.6
> sample(c(4.9), 9, replace=TRUE)
[1] 2 3 3 2 4 4 3 4 1
データが数値で、最小値が1で、長さが1である場合(いわば関数での選択による)、サンプリングリミットとして解釈される。上の例のデータは、最も近い整数にスケールダウンされていることに注意してください。
これは、文字系データを作るコードの組み合わせが複雑なのです。
> as.numeric(sample(as.character(c(4.9)), 9, replace=TRUE))
[1] 4.9 4.9 4.9 4.9 4.9 4.9 4.9 4.9 4.9
8.2.34 セクションの名前を変更する
R
は、宣言を置き換えるために深堀りするのがうまい。例えば、以下は期待通りの働きをしてくれます。
names(mylist$b[[1]]) <- letters[1:10]
しかし、間違っている可能性もある。以下はその例です。
> right <- wrong <- c(a=1, b=2)
> names(wrong[1]) <- 'changed'
> wrong
a b
1 2
> names(right)[1] <- 'changed'
> right
changed b
1 2
間違いは、名前を変えてから捨てたことです。ですから、この愚かな例で最初の2つの名前を変更するためには、次のようにします。
names(mylist$b[[1]])[1:2] <- LETTERS[1:2]
8.2.35 A 混乱
> class(dfxy)
[1] "data.frame"
> length(dfxy)
[1] 8
> length(as.matrix(dfxy))
[1] 120
これは何なのか
nrow(dfxy)
8.2.36 もう一つの混乱
以下が有効なコマンドである場合。
weirdFun()()()
何を返すのでしょうか?
例を書いてください。
8.2.37 データフレームとマトリックス (I)
行列とデータフレームは、印刷すると同じように見えます。それはいいことです。コンセプトがとても似ているからです。しかし、その実装は実にさまざまです。コンセプトが似ていて、実装が異なるオブジェクトはトラブルの元です。
> x %*% y
Error in x %*% y : requires numeric matrix/vector arguments
問題は
x
は行列のように見えますが、実際はデータフレームです。ひとつの解決策として
as.matrix
または
data.matrix
.
データフレームの実装の詳細は、理論的にはユーザーを困らせるものではないはずです。理論には往々にして荒削りな部分があるものです。
8.2.38
apply
データフレームには適用されません
データボックスにラフエッジが適用される
apply
関数を使用します。
また
apply
というのも、演算を行う際にデータフレームを強制的に行列に変換してしまうため、関数が期待通りに動かないことがよくあるからです。
apply(myDataFrame, 2, class) # not right
データフレームは実際にはリストとして実装され、リストの各要素はデータフレームのカラムとなります。このように
lapply(myDataFrame, class)
思い通りに動くようになります。
8.2.39 データフレームとマトリックス (II)
このコマンドを考えてみましょう。
array(sample(x), dim(x))
これにより、行列の要素の並びが変わります。もし
x
がデータフレームである場合、このコマンドは実行されますが、ほとんど何も得ることができません。
このようにデータボックスの列を取得することができます。
x$B
これを行列で試すと、次のようなエラーが発生します。
Error in x$B : $ operator is invalid for atomic vectors
x がデータフレームや行列である場合は、以下のようにするとよいでしょう。
x[, 'B']
一方、行列である可能性を排除したい場合は
'$'
の方がよいでしょう。
データフレームでこれを実行すると、対応するマトリックスで実行するよりも遅くなります。リアルタイムな状況では、データフレームを行列に変換した方が4倍速いでしょう。
シンプルであればあるほどいい。
8.2.40 データフレームとマトリックスの名前
データボックスの名前は、対応するマトリックスの名前とは異なります。データボックスの名前は列の名前であり,行列の名前は個々の要素の名前です.
一貫性のある名称は
- ローンネーム
- 色名
- ディムネーム
関連
-
R言語です。「接続を開くことができません」解決策
-
R: hclust(d, method = method)でのエラー : 外部関数呼び出しは NA/NaN/Inf(arg10) を持つことができません。
-
R言語エラー:図の余白が大きすぎる 解決方法
-
[解決策】 plot.new() のエラー:図の余白が大きすぎる。
-
ggplot2 からグリッドと背景色を削除する。
-
Rでエラー:単項演算子への引数が無効
-
SocketTimeoutExceptionです。読み込みがタイムアウトしました
-
R - ユークリッド距離の計算を簡単にする方法
-
データボックス内の行/列の削除/追加を行うR言語
-
Rの警告 "条件の長さが1より大きいので、最初の要素しか使えない "に対する解決策
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
RStudio の "plot.new() : figure margins too large" 問題を解決する。
-
R 描画エラー plot.new() : 図形の余白が大きすぎる
-
二項演算子への非数値引数を報告するR言語エラー
-
Rでファイルを読み込む際に、そのようなファイルまたはディレクトリが見つかりません。
-
R: エラー: $ 演算子は原子ベクトルに対して無効です。
-
R: 環境と変数のスコープ問題
-
R - よくあるエラーとその原因 - 注意事項
-
R plot.new() のエラー : 図形の余白が大きすぎる
-
R read.table Error:埋め込まれたヌルが含まれているようです。
-
[R] is.data.frame(x) のエラー : (リスト) オブジェクトを 'double' 型に強制できない。