Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 为什么二进制运算符的错误消息与字符的错误消息不同?_R - Fatal编程技术网

R 为什么二进制运算符的错误消息与字符的错误消息不同?

R 为什么二进制运算符的错误消息与字符的错误消息不同?,r,R,我知道并理解像加法和减法这样的操作对于字符类和因子类数据都是无效的。我不明白的是,为什么R的行为对于这两种类型都是不同的 例如 #创建角色和因素 my_text这可能是因为调用的函数不同 正如您在算术运算符帮助页面中所读到的: 一元和二元算术运算符是泛型函数:可以单独为它们编写方法,也可以通过Ops group泛型函数编写方法 然后,如果您查看S3组通用功能帮助页面,在“Ops”段落下,您可以阅读: 对于每个参数,将检查其类向量,以查看是否存在匹配的特定(首选)或Ops方法。如果只为一个参数找到

我知道并理解像加法和减法这样的操作对于字符类和因子类数据都是无效的。我不明白的是,为什么R的行为对于这两种类型都是不同的

例如

#创建角色和因素

my_text这可能是因为调用的函数不同

正如您在算术运算符帮助页面中所读到的:

一元和二元算术运算符是泛型函数:可以单独为它们编写方法,也可以通过Ops group泛型函数编写方法

然后,如果您查看S3组通用功能帮助页面,在“Ops”段落下,您可以阅读:

对于每个参数,将检查其类向量,以查看是否存在匹配的特定(首选)或Ops方法。如果只为一个参数找到了一个方法,或者为两个参数找到了相同的方法,则将使用该方法。如果找到了不同的方法,则会出现关于“不兼容方法”的警告:在这种情况下,或者如果没有为任一参数找到方法,则使用内部方法

因此,对于
my_factor
,将调用
Ops.factor
(如您在警告消息中所看到的),在其开头,您将发现:

 ok <- switch(.Generic, `==` = , `!=` = TRUE, FALSE)
 if (!ok) {
     warning(gettextf("%s not meaningful for factors", sQuote(.Generic)))
     return(rep.int(NA, max(length(e1), if (!missing(e2)) length(e2))))
 }
ok
 ok <- switch(.Generic, `==` = , `!=` = TRUE, FALSE)
 if (!ok) {
     warning(gettextf("%s not meaningful for factors", sQuote(.Generic)))
     return(rep.int(NA, max(length(e1), if (!missing(e2)) length(e2))))
 }