前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >R海拾遗-sprintf函数

R海拾遗-sprintf函数

作者头像
火星娃统计
发布2020-09-15 15:21:20
9820
发布2020-09-15 15:21:20
举报
文章被收录于专栏:火星娃统计火星娃统计

sprintf 函数

概述

sprintf函数是用来返回包含输入值的格式化组合的字符对象,偶然间在table1函数源代码中发现这个函数 对于数字和字符串联合使用的处理比较优秀 ## 代码和例子

基本格式

代码语言:javascript
复制
x<-123.456# 建立测试向量
# 默认返回结果
sprintf("%f", x)
代码语言:javascript
复制
## [1] "123.456000"
  • 一些解释 Notation Description %s 字符串 %d 整数 %0xd 用x个零填充的整数 %f 浮点 %.xf 浮点后x个小数 %e 科学计数 %E 科学计数 %g 紧凑小数或者科学计数

基本格式

代码语言:javascript
复制
# %[parameter][flags][width][.precision][length]type
  • % 开始位置
  • parameter 可选,指定返回值的位置n$
  • flags 指示符
  • width 字符宽度
  • precision 精度
  • 长度
  • 符号类型

例子

保留三位小数

代码语言:javascript
复制
sprintf('%.3f', x)
代码语言:javascript
复制
## [1] "123.456"

和字符串结合,批量生成文件名

代码语言:javascript
复制
sprintf('data%02d.csv', 1:9)
代码语言:javascript
复制
## [1] "data01.csv" "data02.csv" "data03.csv" "data04.csv" "data05.csv"
## [6] "data06.csv" "data07.csv" "data08.csv" "data09.csv"

如果手动生成就比较麻烦

字符前添加空格

代码语言:javascript
复制
sprintf("%10.0f", x)
代码语言:javascript
复制
## [1] "       123"

字符前加别的字符

代码语言:javascript
复制
sprintf("%+f", x)
代码语言:javascript
复制
## [1] "+123.456000"

字符后加符号,通过paste0函数

代码语言:javascript
复制
paste0(sprintf("%f", x),
       "%")
代码语言:javascript
复制
## [1] "123.456000%"

科学计数

代码语言:javascript
复制
sprintf("%e", x)
代码语言:javascript
复制
## [1] "1.234560e+02"

大写的E同理

代码语言:javascript
复制
sprintf("%E", x)
代码语言:javascript
复制
## [1] "1.234560E+02"

一个现实的例子

如何能够在导出的csv文件中显示均值加减标准差的操作?

代码语言:javascript
复制
data(iris)
sprintf("%1.3f ± %1.2f",mean(iris[,1]),sd(iris[,1]))
代码语言:javascript
复制
## [1] "5.843 ± 0.83"
代码语言:javascript
复制
sprintf("%1.3f (%1.2f)",mean(iris[,1]),sd(iris[,1]))
代码语言:javascript
复制
## [1] "5.843 (0.83)"

这样做的好处 * 可以一步到位,不用再次在excel中编辑 * tableone和table1包虽然方便,但表达方式不可选 * DIY自己的table 1 * 当然是用paste和format函数也能达到一样的目的,但是编写复杂

有趣的例子

代码语言:javascript
复制
sq<-list(
  name="人厨子",
  age=88,
  birth=1911,
  city="beijing",
  like="chi"
)
# 定义人厨子类型
class(sq)<-"renchuzi"
# 定义人厨子类型的默认打印
print.renchuzi <- function(x) {
  cat("renchuzi\n")
  cat(sprintf('name: %s\n', x$name))
  cat(sprintf('age: %s\n', x$age))
  cat(sprintf('like: %s\n', x$like))
  invisible(x)
}
# 输入sq
sq
代码语言:javascript
复制
## renchuzi
## name: 人厨子
## age: 88
## like: chi

结束语

今天是一个不顺利的一天,拉了一天的肚子,真是难受。`love&peace```

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-06-30,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 火星娃统计 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • sprintf 函数
    • 概述
      • 基本格式
      • 例子
      • 一个现实的例子
      • 有趣的例子
    • 结束语
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档