在数据框中使用向量的打印方法

2023-12-12

考虑以下向量x

x <- c(6e+06, 75000400, 743450000, 340000, 4300000)

我想打印x以百万计,所以我编写了一个 print 方法并将一个类分配给x

print.million <- function(x, ...) {
    x <- paste0(round(x / 1e6, 1), "M")
    NextMethod(x, quote = FALSE, ...)
}

class(x) <- "million"

So now x将按照我想要的方式打印,并且数值也保持不变。

x
# [1] 6M     75M    743.5M 0.3M   4.3M  
unclass(x)
# [1]   6000000  75000400 743450000    340000   4300000

这就是我想解决的问题。当我去放的时候x到数据框中,打印方法不再适用,并且数值x都可以正常打印。

(df <- data.frame(x = I(x)))
#           x
# 1     6e+06
# 2  75000400
# 3 743450000
# 4    340000
# 5   4300000

的班级x列仍然是“百万”类,这绝对是我想要的。

df$x
# [1] 6M     75M    743.5M 0.3M   4.3M  
class(df$x)
# [1] "AsIs"    "million"

我怎样才能把x放入数据框并保持其打印方法?我已经尝试了所有的论点data.frame()并且真的不知道下一步该转向哪里。

期望的结果是下面的数据框,其中x仍然是“百万”类,它保留其基础数值,并且还像在控制台中打印矢量时一样在数据框中打印。

#        x
# 1     6M
# 2    75M
# 3 743.5M
# 4   0.3M
# 5   4.3M

Note:这个问题涉及到第二部分我之前发布的一个答案.


你需要一个format方法和as.data.frame方法,像这样:

x <- c(6e+06, 75000400, 743450000, 340000, 4300000)
class(x) <- 'million'
format.million <- function(x,...)paste0(round(unclass(x) / 1e6, 1), "M")
as.data.frame.million <- base:::as.data.frame.factor
data.frame(x)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在数据框中使用向量的打印方法 的相关文章

随机推荐