如何禁用科学记数法?

问题描述 投票:0回答:5

我有一个包含一列 p 值的数据框,我想对这些 p 值进行选择。

> pvalues_anova
[1] 9.693919e-01 9.781728e-01 9.918415e-01 9.716883e-01 1.667183e-02
[6] 9.952762e-02 5.386854e-01 9.997699e-01 8.714044e-01 7.211856e-01
[11] 9.536330e-01 9.239667e-01 9.645590e-01 9.478572e-01 6.243775e-01
[16] 5.608563e-01 1.371190e-04 9.601970e-01 9.988648e-01 9.698365e-01
[21] 2.795891e-06 1.290176e-01 7.125751e-01 5.193604e-01 4.835312e-04

选择方式:

anovatest<- results[ - which(results$pvalues_anova < 0.8) ,]

如果我在 R 中使用它,该函数工作得很好。但是如果我在另一个应用程序(galaxy)中运行它,则没有

e-01
的数字,例如
4.835312e-04
没有被扔掉。

是否有另一种表示 p 值的方法,例如

0.0004835312
而不是
4.835312e-04

r formatting scientific-notation
5个回答
671
投票

您可以使用此代码有效地去除打印中的科学记数法:

options(scipen=999)

21
投票
format(99999999,scientific = FALSE)

给予

99999999

11
投票

总结所有现有答案

(并添加我的一些观点)

注意:在下面的解释中,

value
是以某种(整数/浮点数)格式表示的数字。

解决方案 1:

options(scipen=999)

解决方案2:

format(value, scientific=FALSE);

解决方案 3:

as.integer(value);

解决方案 4:

您可以使用不以科学记数法打印的整数。您可以通过在后面加上“L”来指定您的数字是一个整数

paste(100000L)

将打印

100000

解决方案 5:

使用'sprintf()'严格控制格式

sprintf("%6d", 100000)

将打印

100000

解决方案 6:

prettyNum(value, scientific = FALSE, digits = 16)

2
投票

我还发现

prettyNum(..., scientific = FALSE)
函数在我不想要尾随零时对打印很有用。请注意,这些函数对于打印目的很有用,即这些函数的输出是字符串,而不是数字。

p_value <- c(2.45496e-5, 3e-17, 5.002e-5, 0.3, 123456789.123456789)
format(p_value, scientific = FALSE)
#> [1] "        0.00002454960000000" "        0.00000000000000003"
#> [3] "        0.00005002000000000" "        0.29999999999999999"
#> [5] "123456789.12345679104328156"


format(p_value, scientific = FALSE, drop0trailing = TRUE)
#> [1] "        0.0000245496"        "        0.00000000000000003"
#> [3] "        0.00005002"          "        0.29999999999999999"
#> [5] "123456789.12345679104328156"


# Please note that the last number's last two digits are rounded:
prettyNum(p_value, scientific = FALSE, digits = 16)
#> [1] "0.0000245496"        "0.00000000000000003" "0.00005002"
#> [4] "0.3"                 "123456789.1234568"

0
投票

除了现有的答案,例如,如果想在整个列上使用前面提到的

format()
和dplyr,那么
format()
需要被包裹在lambda函数中:

colors <- c("red", "green", "blue", "yellow", "orange")
floats <- runif(5) / 1000000

df <- data.frame(colors, floats) %>% 
  dplyr::mutate_if(is.numeric, function(x) format(x, scientific = FALSE))

© www.soinside.com 2019 - 2024. All rights reserved.