Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/84.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,我找不到哪种打印方法用于不同类别的原子向量。 例如,为什么字符用引号打印,而数字不用引号打印? 我找不到print.numeric/print.characteretc方法 其原因是,除了需要更深入的理解之外,还要为一个新类创建一个print方法,我想了解当前类是如何被打印的 示例:为原子x分配一个新类,使打印打印属性,这是我不想要的。了解这背后的打印方法将有助于我调整这一点 x[1]12345 类别(x)[1]1 2 3 4 5 #>属性(,“类”) #>[1]“整数”“新” 这取决于你对Tj

我找不到哪种打印方法用于不同类别的原子向量。 例如,为什么字符用引号打印,而数字不用引号打印? 我找不到
print.numeric
/
print.character
etc方法

其原因是,除了需要更深入的理解之外,还要为一个新类创建一个print方法,我想了解当前类是如何被打印的

示例:为原子x分配一个新类,使
打印
打印属性,这是我不想要的。了解这背后的打印方法将有助于我调整这一点

x[1]12345
类别(x)[1]1 2 3 4 5
#>属性(,“类”)
#>[1]“整数”“新”

这取决于你对Tjebo解释的深度。对于内置类,调用
print.default
方法,然后调用一些内部C代码

定义了在
print.default
中调用的内部C函数。C代码将R对象作为
SEXP
对象,并通过检查其基本类型和使用switch语句确定使用C打印方法
sprintf
向控制台打印的格式来决定如何处理它

这并不神秘,因为您可以很容易地跟踪代码,但基本类型的打印方法基本上是在C代码中定义的,您不能直接更改它们

但是,这并不能阻止您通过为内置类型定义自己的打印方法来覆盖它们:

print.character I打印字符
定义新类时,不需要满足于默认打印属性等:

x <- 1:5 
class(x) <- c(class(x), "new")
print.new <- function(x) cat("My fancy new class prints like this:", x)
x
#> My fancy new class prints like this: 1 2 3 4 5

x通常
print.default
提供一个函数来查找将在对象上调度的S3方法。如果通过
findMethod(print,x)
在数值向量
x
上使用它,则会得到
[1]“print.default”
。如果你在字符向量上使用它,你会得到同样的结果,确认@alistaire的评论。但是,
print.default()
方法调用C代码,因此对于典型的R用户来说,需要比平常更多的工作来理解正在发生的事情。如果您只是想为您的自定义类创建一个不打印class属性的print方法,那么它应该是直截了当的。谢谢这两种方法,这很有帮助。我想知道print.default,但不太确定,因为字符和数字的结果不同。我想我不得不承认这是一个谜团。C代码并非不可能找到:,第43页。幸运的是,我刚刚遇到了用户IRTFM对这个答案的一个小评论:。建议的想法确实提供了一个非常直接的解决方案,如何像print.default那样打印:例如,
print.new=function(x){print.default(as.character(x))}