How do you cast a double to an integer in R?

后端 未结 4 1060
南笙
南笙 2021-02-13 03:04

My question is: Suppose you have computed an algorithm that gives the number of iterations and you would like to print the number of iterations out. But the output always many d

相关标签:
4条回答
  • 2021-02-13 03:46

    Instead of trying to convert the output into an integer, find out why it is not an integer in the first place, and fix it there.

    Did you initialize it as an integer, e.g. num.iterations <- 0L or num.iterations <- integer(1) or did you make the mistake of setting it to 0 (a numeric)?

    When you incremented it, did you add 1 (a numeric) or 1L (an integer)?

    If you are not sure, go through your code and check your variable's type using the class function.

    Fixing the problem at the root could save you a lot of trouble down the line. It could also make your code more efficient as numerous operations are faster on integers than numerics (an example).

    0 讨论(0)
  • 2021-02-13 03:55

    The function as.integer() truncate the number up to 0 order, so you must add a 0.5 to get a proper approx

    dd<-64.00000000
    as.integer(dd+0.5)
    
    0 讨论(0)
  • 2021-02-13 03:55

    If you have a numeric matrix you wish to coerce to an integer matrix (e.g., you are creating a set of dummy variables from a factor), as.integer(matrix_object) will coerce the matrix to a vector, which is not what you want. Instead, you can use storage.mode(matrix_object) <- "integer" to maintain the matrix form.

    0 讨论(0)
  • 2021-02-13 04:09

    There are some gotchas in coercing to integer mode. Presumably you have a variety of numbers in some structure. If you are working with a matrix, then the print routine will display all the numbers at the same precision. If you have calculated this result with an arithmetic process it may be actually less than 64 bit display as that value.

    > 64.00000000-.00000099999
    [1] 64
    > 64.00000000-.0000099999
    [1] 63.99999
    

    So assuming you want all the values in whatever structure this is part of, to be displayed as integers, the safest would be:

    round(64.000000, 0)
    

    ... since this could happen, otherwise.

    > as.integer(64.00000000-.00000000009)
    [1] 63
    

    The other gotcha is that the range of value for integers is considerably less than the range of floating point numbers.

    0 讨论(0)
提交回复
热议问题