为什么使用editText.setCompoundDrawablesWithIntrinsicBounds(0, 0, R.drawable.drawableRight, 0);
类型:
创建的向量和使用integer
类型的c()
创建的向量?
double
答案 0 :(得分:4)
不完全回答为什么,但试图阐明 的内容。
让我们从创建一些数字序列开始:
x <- 1:10
z <- c(1,2,3,4,5,6,7,8,9,10)
typeof(x)
# [1] "integer"
typeof(z)
# [1] "double"
class(x)
# [1] "integer"
class(z)
# [1] "numeric"
正如@docendodiscimus指出的那样,它们可能看起来一样,但它们是不同的。如果您检查它们是否相同,这很重要:
identical(x,z)
# [1] FALSE
x == z
# [1] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
虽然==
是“二进制运算符,允许比较原子向量中的值”。 (参见?==
),identical()
是“测试两个对象完全相等的安全可靠的方法。在这种情况下返回TRUE,在其他情况下返回FALSE。” (见?identical
)。
当您比较seq()
y1 <- seq(1,10) # which is the equivalent to 1:10 (see ?`:`)
y2 <- seq(1,10, by = 1)
typeof(y1)
# [1] "integer"
typeof(y2)
# [1] "double"
class(y1)
# [1] "integer"
class(y2)
# [1] "numeric"
由于by = ...
参数缺失1 is assumed,因此整数向量足以表示序列。
除了完全令人困惑之外,这可能都是由于设计问题(这与我可以接近为什么一样接近)。因此,help中说明了
“程序员不应该依赖于”[序列的类型或类别]
但是,所有向量的mode
为numeric
mode(y1)
# [1] "numeric"
mode(y2)
# [1] "numeric"
mode(x)
# [1] "numeric"
mode(z)
# [1] "numeric"
有关这种疯狂行为的更多信息,你应该看看this section in The R Inferno(实际上,整本书都是一本很好的读物)。
要解决此问题,您可以考虑将 {em> 整数的z
向量强制转换为 true 整数< / p>
z <- as.integer(c(1,2,3,4,5,6,7,8,9,10))
typeof(z)
# [1] "integer"
class(z)
# [1] "integer"
identical(x,z)
# [1] TRUE