sprintf函数是用来返回包含输入值的格式化组合的字符对象,偶然间在table1函数源代码中发现这个函数 对于数字和字符串联合使用的处理比较优秀 ## 代码和例子
x<-123.456# 建立测试向量
# 默认返回结果
sprintf("%f", x)
## [1] "123.456000"
基本格式
# %[parameter][flags][width][.precision][length]type
保留三位小数
sprintf('%.3f', x)
## [1] "123.456"
和字符串结合,批量生成文件名
sprintf('data%02d.csv', 1:9)
## [1] "data01.csv" "data02.csv" "data03.csv" "data04.csv" "data05.csv"
## [6] "data06.csv" "data07.csv" "data08.csv" "data09.csv"
如果手动生成就比较麻烦
字符前添加空格
sprintf("%10.0f", x)
## [1] " 123"
字符前加别的字符
sprintf("%+f", x)
## [1] "+123.456000"
字符后加符号,通过paste0函数
paste0(sprintf("%f", x),
"%")
## [1] "123.456000%"
科学计数
sprintf("%e", x)
## [1] "1.234560e+02"
大写的E同理
sprintf("%E", x)
## [1] "1.234560E+02"
如何能够在导出的csv文件中显示均值加减标准差的操作?
data(iris)
sprintf("%1.3f ± %1.2f",mean(iris[,1]),sd(iris[,1]))
## [1] "5.843 ± 0.83"
sprintf("%1.3f (%1.2f)",mean(iris[,1]),sd(iris[,1]))
## [1] "5.843 (0.83)"
这样做的好处 * 可以一步到位,不用再次在excel中编辑 * tableone和table1包虽然方便,但表达方式不可选 * DIY自己的table 1 * 当然是用paste和format函数也能达到一样的目的,但是编写复杂
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
## renchuzi
## name: 人厨子
## age: 88
## like: chi
今天是一个不顺利的一天,拉了一天的肚子,真是难受。`love&peace```