【发布时间】:2014-06-02 13:18:57
【问题描述】:
例如,我有一个这样的向量:
time <- c(0, 0.5, 1, 1.5, 2, 2.5)
如果我必须在图表中写第三个元素,我必须使用这个命令:
text(7.5,75, time[3])
显示为 1,但我希望显示为 1.0,如何使第一个十进制数字显示?
【问题讨论】:
-
R 中的索引从 1 开始,而不是从 0。此外,您可以使用
sprintf格式化数字。
例如,我有一个这样的向量:
time <- c(0, 0.5, 1, 1.5, 2, 2.5)
如果我必须在图表中写第三个元素,我必须使用这个命令:
text(7.5,75, time[3])
显示为 1,但我希望显示为 1.0,如何使第一个十进制数字显示?
【问题讨论】:
sprintf 格式化数字。
使用sprintf("%.1f", time),您可以将十进制数字设置为 1。
【讨论】:
这是包装sprintf 的一种方法。这是我保留的报告。请注意,它还会删除不重要的前导零。
numfor <- function (val, digits, override = FALSE) {
if (all(is.Integer(val), na.rm = TRUE) & !override) {
sub("^(-?)0.", "\\1.", sprintf(paste0("%.0f"), val))
} else {
sub("^(-?)0.", "\\1.", sprintf(paste0("%.", digits, "f"), val))
}
}
is.Integer <- function(x, tol = .Machine$double.eps^0.5) {
abs(x - round(x)) < tol
}
time <- c(0, 0.5, 1, 1.5, 2, 2.5)
numfor(time, 1)
## [1] ".0" ".5" "1.0" "1.5" "2.0" "2.5"
override 做了什么:
## > numfor(1:10, 1)
## [1] "1" "2" "3" "4" "5" "6" "7" "8" "9" "10"
## > numfor(1:10, 1, override=TRUE)
## [1] "1.0" "2.0" "3.0" "4.0" "5.0" "6.0" "7.0" "8.0" "9.0" "10.0"
【讨论】: