R:单独格式化向量中的数字

Posted

技术标签:

【中文标题】R:单独格式化向量中的数字【英文标题】:R: Format Numbers in a Vector Individually 【发布时间】:2014-08-08 01:11:35 【问题描述】:

我在数据框的一列中有一系列 10 个 p 值:

df$p <- c(0.00000005, 0.000001, 0.0001, 0.001, 0.01, 0.05, 0.1, 0.2, 0.5, 1)

由于以十进制读取较大的 p 值和以科学计数法读取较小的 p 值更容易,我希望它的格式如下:

5e-8, 1e-6, 1e-4, 0.001, 0.01, 0.05, 0.1, 0.2, 0.5, 1

但无论我如何使用options(scipen=whatever)format(df$p, scientific=whatever),R 都会以相同的方式显示所有元素(即全部以十进制表示,或全部以科学计数法表示)。

我想要的是让 R 对这个向量的每个元素单独应用科学惩罚,因此它们显示为十进制或 SN,具体取决于哪个可以节省更多空间。

【问题讨论】:

mapply(format, df$p)sapply(df$p, format) 是否足够?结果是一个字符向量。 @Frank,两者都很好用! @rawr,format.pval(df$p, digits=8, drop0trailing=T) 工作! 【参考方案1】:

使用以下选项

> p <- c(0.00000005, 0.000001, 0.0001, 0.001, 0.01, 0.05, 0.1, 0.2, 0.5, 1)
> options(scipen = 999)
> p
 [1] 0.00000005 0.00000100 0.00010000 0.00100000 0.01000000 0.05000000 0.10000000 0.20000000 0.50000000 1.00000000
> options(scipen = 1)
> p
 [1] 5e-08 1e-06 1e-04 1e-03 1e-02 5e-02 1e-01 2e-01 5e-01 1e+00

也许您需要将选项(scipen)放在脚本的开头。或者你可以使用

> mapply(format, p)
 [1] "5e-08"  "1e-06"  "0.0001" "0.001"  "0.01"   "0.05"   "0.1"    "0.2"    "0.5"    "1"

【讨论】:

mapply(format, df$p) 是我想要的。正如其他 cmets 所指出的,sapply(df$p, format)format.pval(df$p, digits=8, drop0trailing=T) 也可以。

以上是关于R:单独格式化向量中的数字的主要内容,如果未能解决你的问题,请参考以下文章

计算/翻译R中二进制矩阵/向量中的数字向量

R语言格式化数字和字符串format函数

R语言boot包中的boot函数格式以及参数说明boot.ci函数格式以及参数说明使用boot包进行自助法Bootstrapping分析的步骤计算统计量或者统计向量的置信区间

将整数向量打印为十进制数

在 R 中格式化具有不一致日期格式的向量

将由单个数字和序列组成的字符串转换为允许对向量或数据帧进行子集化的格式