即使使用选项,R中的huxtable默认为科学记数法(scipen = 999)

时间:2018-04-28 20:22:16

标签: r

我试图生成像样的桌子并且在过去的一周尝试了很多套餐,我的头脑正在游泳。开始打包:今天早上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),并且在打包之前没有任何问题:huxtable。最终我发现/偶然发现了一个解决方案:

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

我已经设定了scipen,所以我最后来回试图修复一些没有破坏的东西。我的(准noob)问题:我是否正确地得出结论,由于某种原因,这个方案正在压倒全球环境?是否有办法防止这种情况发生或在发生覆盖时设置某种警告?可以全局设置此格式吗?我不希望很快就会使用科学记数法。

2 个答案:

答案 0 :(得分:1)

当你&#34; print()&#34;方法(通过键入x1变量名称),它将如何输出值。它使用它自己的显示方法。碰巧写这个包的人不会查看options()函数设置的全局选项。它不会覆盖任何选项,只是忽略它们。 但是,如果从x1结构中提取列,则R将以所需​​格式打印值:

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

旁注:这不是唯一能够做到这一点的软件包。

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

答案 1 :(得分:0)

您可以使用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