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))}