【问题标题】:huxtable in R defaults to scientific notation even with options(scipen=999)即使有选项(scipen=999),R 中的 huxtable 也默认为科学记数法
【发布时间】:2018-10-09 09:07:24
【问题描述】:

在过去的一周里,我试图生成像样的桌子并尝试了很多包,我的脑袋都在游泳。今天早上从 package:huxtable 开始,试图摆脱科学记数法时卡住了:

x <- mtcars[1:5,1:2]
x$mpg <- x$mpg*10000000 # get some large numbers
library(huxtable)
x1 <- as_hux(x)
x1
  # 2.1e+08    6        
  # 2.1e+08    6        
  # 2.28e+08   4        
  # 2.14e+08   6        
  # 1.87e+08   8 

我前段时间设置了全局选项(scipen=999,digits = 9),直到 package:huxtable 之前没有任何问题。最终我发现/偶然发现了一个解决方案:

x1 <- format(as_hux(x, scientific=FALSE))

我已经设置了 scipen,所以我最终来回尝试修复没有损坏的东西。我的(准菜鸟)问题:我的结论是正确的吗?出于某种原因,这个包覆盖了全局设置?有没有办法防止这种情况发生或在发生覆盖时设置某种警告?可以全局设置此格式吗?我不希望很快使用科学计数法。

【问题讨论】:

    标签: r


    【解决方案1】:

    您可以使用number_format() 选项更改 huxtable 显示数字的方式:

    number_format(x1) <- 2 # decimal places
    x1
      210000000.00      6.00  
      210000000.00      6.00  
      228000000.00      4.00  
      214000000.00      6.00  
      187000000.00      8.00  
    Column names: mpg, cyl
    
    number_format(x1) <- '%2.2f' # sprintf notation
    x1
      210000000.00      6.00  
      210000000.00      6.00  
      228000000.00      4.00  
      214000000.00      6.00  
      187000000.00      8.00  
    
    Column names: mpg, cyl
    
    # arbitrary function, wrapped in a list:
    number_format(x1) <- list(function (x) prettyNum(sprintf(x, "%2.2f"), ",")) 
    x1
      210,000,000.00      6.00  
      210,000,000.00      6.00  
      228,000,000.00      4.00  
      214,000,000.00      6.00  
      187,000,000.00      8.00  
    

    【讨论】:

    • 如果你希望数字完全不被格式化,你可以使用```number_format(x1)
    【解决方案2】:

    当您使用“print()”方法(通过输入x1 变量名)时,取决于包将如何输出值。它为此使用了自己的显示方法。碰巧写这个包的人没有查看 options() 函数设置的全局选项。它不会覆盖任何选项,而只是忽略它们。 但是,如果您从 x1 结构中提取一列,R 将以所需的格式打印值:

    > print(x1$mpg)
    [1] 210000000 210000000 228000000 214000000 187000000
    

    附注:这不是唯一这样做的包。

    顺便说一句,您找到的解决方案(format() 函数)实际上将数据转换回常规数据框,因此使用您设置的 scipen=999 选项显示值。

    【讨论】:

    • TY。在您指出它之后,我意识到 format() 正在将一个 huxtable 转换回 data.frame。我重新访问了小插图中的 number_format() ,因为我的数据没有小数点,所以我在过程的早期就跳过了它,因为我的数据没有小数点,因此标记的任何内容都好像我从未见过一样。我猜写这个包的人有数学或类似的高级学位——我不知道有多少普通人想要并且可以阅读科学计数法的 html 表格并理解它们。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-27
    • 2022-01-15
    • 2013-06-27
    • 2013-04-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多