当前位置: 首页 > 知识库问答 >
问题:

在R中,为什么is.integer(1)返回false?

公风史
2023-03-14

在R中,为.integer(1)返回FALSE和类(1)返回“numeric”,而为.integer(1:1)返回TRUE和类(1:1)返回“integer”。为什么is.integer(1)不返回true?

x1=seq(from=1, to=5, by=1) 
x2=1:5
x1 
[1] 1 2 3 4 5 
x2 
[1] 1 2 3 4 5 
class(x1) 
[1] "numeric" 
class(x2)
[1] "integer"

要确定x1是否包含整数值,我需要使用all(如.integer(x1)==x1)。有更简单的方法吗?

class()可以返回数组,例如有序因子。类(1)不应该返回c(“numeric”,“integer”)吗?

共有1个答案

籍永安
2023-03-14

希望这有助于澄清一些事情。你的例子不一定说明全部事实。实际上,从seq返回的向量类型取决于您使用的参数。下面是?seq中的示例设置。

seqList <- list(
    fromto = seq(from = 1, to = 5),
    fromtoby = seq(from = 1, to = 5, by = 1),
    fromtolengthout = seq(from = 1, to = 5, length.out = 5),
    alongwith = seq(along.with = 5),
    from = seq(from = 1),
    lengthout = seq(length.out = 5),
    binary = 1:5
)

对于结果,我们可以看到,当我们使用by参数时(正如您所做的那样),结果不是整数类型的。一旦参数检查发生,结果的类型就会更改为数值(我想,如果我错了,请纠正我)。

str(seqList)
# List of 7
#  $ fromto         : int [1:5] 1 2 3 4 5
#  $ fromtoby       : num [1:5] 1 2 3 4 5
#  $ fromtolengthout: num [1:5] 1 2 3 4 5
#  $ alongwith      : int 1
#  $ from           : int 1
#  $ lengthout      : int [1:5] 1 2 3 4 5
#  $ binary         : int [1:5] 1 2 3 4 5

seq是一个泛型函数,它根据提供的参数分派给不同的方法。所有这些都在?seq中进行了解释。值得一读。还有seq.intseq_lenseq_along,它们也不同于seq。现在关于你的问题

f <- factor(letters[1:5])
x <- 1:5
f == x
# [1] FALSE FALSE FALSE FALSE FALSE
as.integer(f) == x
# [1] TRUE TRUE TRUE TRUE TRUE

我会使用inheritstypeof。第一个返回一个逻辑语句,这在if语句中可以很好地工作。typeof返回一个向量类型的字符串。

look <- function(x) {
    c(class = class(x), typeof = typeof(x), 
      mode = mode(x), inherits = inherits(x, "integer"))
}
noquote(do.call(rbind, lapply(seqList, look)))
#                 class   typeof  mode    inherits
# fromto          integer integer numeric TRUE    
# fromtoby        numeric double  numeric FALSE   
# fromtolengthout numeric double  numeric FALSE   
# alongwith       integer integer numeric TRUE    
# from            integer integer numeric TRUE    
# lengthout       integer integer numeric TRUE    
# binary          integer integer numeric TRUE    

阅读帮助文件非常有用。我绝对不是这方面的专家,所以如果我在这里有任何错误,请让我知道。这里有更多的东西来激发好奇心:

is.integer(1)
# [1] FALSE
is.integer(1L)
# [1] TRUE
 类似资料:
  • 问题内容: 在下面的程序中,你可以看到.5除以外的每个值都略小于四舍五入的值0.5。 版画 我正在使用Java 6 update 31。 问题答案: 摘要 在Java 6(可能更早)中,实现为。1 这是一个规范错误,恰恰是这种病理情况。2 Java 7不再强制执行此无效的实现。3 问题 0.5 + 0.499999999999999999994的双精度正好为1: 这是因为0.49999999999

  • 问题内容: 为什么此代码有时返回1E + 1,而对于其他输入(例如17)却没有以科学计数法打印输出? 问题答案: 使用bigDecimal.toPlainString(): 输出:

  • 问题内容: 我正在运行程序 我得到的输出是。 我不明白这条线 子女的父母的PID为1 应该是3071? 问题答案: 因为在孩子要求其父母的pid之前,父进程已完成。 进程完成后,其所有子级都将重新分配为init进程的子级,其pid为1。 尝试使用父母的代码来等待孩子执行。然后,它应该会按预期工作。

  • 问题内容: 即使正则表达式应返回true,程序也不会退出。代码有什么问题? 问题答案: 仅当整个字符串与正则表达式匹配时才返回。在你的情况下,你的正则表达式仅代表 一个 字符不是,或。 我怀疑您要检查字符串是否包含您在正则表达式中描述的这些特殊字符之一。在这种情况下,请将您的正则表达式括起来,以使正则表达式匹配整个字符串。哦,您不必逃脱character class内部。

  • 问题内容: 使用SQL Server 2012: 产量 必须指定要从中选择的表 这正是我所期望的。 但有趣的是 返回1。 有人可以向我解释这里算什么吗? 编辑:并可能包括来源… 问题答案: SQL Server(在幕后)有效地将from应用于仅具有一行的虚拟表。因此,您将得到1作为计数。 会做同样的事情,例如,一次返回“ test”。 就像Oracle中的DUAL表,DB2中的SYSDUMMY1等

  • 我有点困惑php函数布尔瓦尔是如何工作的。考虑以下几点