【发布时间】:2015-01-27 02:51:42
【问题描述】:
考虑以下向量x
x <- c(6e+06, 75000400, 743450000, 340000, 4300000)
我希望以百万为单位打印x,所以我写了一个打印方法并将一个类分配给x
print.million <- function(x, ...) {
x <- paste0(round(x / 1e6, 1), "M")
NextMethod(x, quote = FALSE, ...)
}
class(x) <- "million"
所以现在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
注意:此问题与an answer I posted earlier 的第二部分有关。
【问题讨论】:
标签: r