以下代码显然是错误的.有什么问题?
i <- 0.1
i <- i + 0.05
i
## [1] 0.15
if(i==0.15) cat("i equals 0.15") else cat("i does not equal 0.15")
## i does not equal 0.15
Run Code Online (Sandbox Code Playgroud) 我想说这是一个绝对的编程初学者,所以请原谅这个问题是多么基本.
我试图更好地理解R中的"原子"类,也许这适用于编程中的类.我理解字符,逻辑和复杂数据类之间的区别,但我很难找到数字类和整数类之间的根本区别.
假设我有一个简单x <- c(4, 5, 6, 6)的整数向量,这对于整数类是有意义的.但是,当我这样做class(x),我得到[1] "numeric".然后,如果我将此向量转换为整数类x <- as.integer(x).除了类不同之外,它返回相同的精确数字列表.
我的问题是为什么会出现这种情况,以及为什么一组整数的默认类是一个数字类,以及将整数设置为数字而不是整数的优点和缺点是什么.
在R中我们都知道,对于那些我们想要确保处理整数以使用"L"后缀来指定它的方式来说这很方便:
1L
# [1] 1
Run Code Online (Sandbox Code Playgroud)
如果我们没有明确告诉R我们想要一个整数,它会假设我们打算使用numeric数据类型......
str( 1 * 1 )
# num 1
str( 1L * 1L )
# int 1
Run Code Online (Sandbox Code Playgroud)
为什么"L"是首选后缀,为什么不是"我"呢?有历史原因吗?
另外,为什么R允许我做(有警告):
str(1.0L)
# int 1
# Warning message:
# integer literal 1.0L contains unnecessary decimal point
Run Code Online (Sandbox Code Playgroud)
但不是..
str(1.1L)
# num 1.1
#Warning message:
#integer literal 1.1L contains decimal; using numeric value
Run Code Online (Sandbox Code Playgroud)
我希望两者都返回一个错误.