7

この質問は以前に回答されている可能性がありますが、回答がありませんでした。

数値と欠損値で構成されるデータ セットがあります。1 行はパーセンテージです。以下は、AA、BB、および CC が列名である偽のデータの小さなセットです。このデータセットの 3 行目はパーセンテージです。

   AA    BB    CC
  234   432    78
 1980  3452  2323
 91.1    90  93.3
   34   123    45

この場合、データセットを読み取ると、AA と CC は数値で、BB は整数です。どこかで 90.0 が 90 に丸められたと思います。BB が数値であることを指定しないと、基本的な算術演算で問題が発生する可能性がありますか?

dd = 1 と ee = 2 で両方が整数の場合、C 言語は dd / ee = 0 と言い、R は dd / ee = 0.5 と言うと思います。

以下は、データが数値であるか整数であるかに関係なく、R の答えが変更されないことを示唆しているように見える一連の単純な数学演算です。それにもかかわらず、データを読み取るときにすべての変数が数値であることを指定するのが賢明だろうと私は考え続けています。Googleを使用して、データ型が違いを生むように見える例を1つか2つ見つけましたが、以下ではありません。

aa <- c(1,2,3,4,5,6,7)
bb <- 2
str(aa)
str(bb)

cc <- as.integer(aa)
dd <- as.integer(bb)
str(cc)
str(dd)

aa/bb
cc/dd
aa/dd
cc/bb

ee <- aa * aa
str(ee)
sum(ee/2)

ff <- cc * cc
str(ff)
sum(ff/2)

gg <- 4.14

hh <- ((aa * aa) * gg) / 2
hh
ii <- ((cc * cc) * gg) / 2
ii

jj <- (aa * aa) / gg
jj
kk <- (cc * cc) / gg
kk
jj == kk

mm <- as.integer(1)
nn <- as.integer(2)
mm/nn

これは単純な数学の問題ではない可能性が高いという安心感を望んでいると思いますが、可能性があると思います. ここにはプログラミングの基本的なルールがあるとずっと思っていますが、それが何であるかはわかりません。(私は倍精度の概念を認識しています。)

確かに基本的な問題であるアドバイスをありがとう。

4

1 に答える 1

7

演算子を使用した除算は、/常に「数値」を返します。つまり、C の「double」に相当します。分子と分母は最初に数値に強制され、次に除算が行われます。整数除算を使用したい場合は、 を使用できます%/%。整数を作成したい場合は、truncorfloorまたはround(x , 0)as.integer を使用できます。これらのオプションの最初の 2 番目と 4 番目は同等です。印刷された表現が整数のように見えても、ラウンド関数は依然として「数値」を返します。「double」/「numeric」の結果に満足している限り、心配する必要はないと思います。なんと、0 で割ることさえ許されています。

あなたの「aa」変数は、整数の束として入力されたにもかかわらず「数値」として分類されましたが、使用しました:

aa <- 1:8  # sequences are integer class.

FAQ 7.31にはあまり驚かないように思えます。

于 2012-09-26T23:44:40.967 に答える