gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 18:40:10 24 4
gpt4 key购买 nike

考虑以下向量 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进入数据框,不再适用print方法,数值 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的第二部分有关.

最佳答案

您需要一个 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)

关于r - 在数据框中使用向量的打印方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28162445/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com