在格式之外,应该使用 toString 吗?
Outside of format, should toString ever be used?
The very first line of the documentation for toString 明明是 format 函数的辅助函数。这是否表明它不应该在 format 函数的内部代码之外使用?如果是这样,为什么 R 将它留给用户使用?
你实际上问了 2 个问题:
-
toString
应该在 format
之外使用吗?
- 为什么 R 用户可以使用它?
关于 1.,请参阅@Rui Barradas 评论,您可以在 format
之外使用它,并且显然有用例。这也回答了2.,但其实还有第二个原因,在帮助中也有说明:
This is a generic function for which methods can be written: only the default method is described here.
这意味着用户可以访问它,以便他们可以轻松地扩展它。例如。说您对矩阵对象的 toString.default
功能不满意:
test_matrix <- matrix(1:4, ncol = 2)
test_matrix
[,1] [,2]
[1,] 1 3
[2,] 2 4
toString(test_matrix)
[1] "1, 2, 3, 4"
它按列运行,但您希望能够选择它是按行运行还是按列运行。现在您可以通过为矩阵对象编写新的 S3 方法来轻松扩展它:
toString.matrix <- function(x, width = NULL, rowwise = TRUE) {
if (rowwise) {
marg <- 1
} else {
marg <- 2
}
temp <- apply(x, marg, paste, collapse = ", ")
string <- paste(temp, collapse = ", ")
if (missing(width) || is.null(width) || width == 0)
return(string)
if (width < 0)
stop("'width' must be positive")
if (nchar(string, type = "w") > width) {
width <- max(6, width)
string <- paste0(strtrim(string, width - 4), "....")
}
string
}
toString(test_matrix)
[1] "1, 3, 2, 4"
toString(test_matrix, rowwise = FALSE)
[1] "1, 2, 3, 4"
The very first line of the documentation for toString 明明是 format 函数的辅助函数。这是否表明它不应该在 format 函数的内部代码之外使用?如果是这样,为什么 R 将它留给用户使用?
你实际上问了 2 个问题:
-
toString
应该在format
之外使用吗? - 为什么 R 用户可以使用它?
关于 1.,请参阅@Rui Barradas 评论,您可以在 format
之外使用它,并且显然有用例。这也回答了2.,但其实还有第二个原因,在帮助中也有说明:
This is a generic function for which methods can be written: only the default method is described here.
这意味着用户可以访问它,以便他们可以轻松地扩展它。例如。说您对矩阵对象的 toString.default
功能不满意:
test_matrix <- matrix(1:4, ncol = 2)
test_matrix
[,1] [,2]
[1,] 1 3
[2,] 2 4
toString(test_matrix)
[1] "1, 2, 3, 4"
它按列运行,但您希望能够选择它是按行运行还是按列运行。现在您可以通过为矩阵对象编写新的 S3 方法来轻松扩展它:
toString.matrix <- function(x, width = NULL, rowwise = TRUE) {
if (rowwise) {
marg <- 1
} else {
marg <- 2
}
temp <- apply(x, marg, paste, collapse = ", ")
string <- paste(temp, collapse = ", ")
if (missing(width) || is.null(width) || width == 0)
return(string)
if (width < 0)
stop("'width' must be positive")
if (nchar(string, type = "w") > width) {
width <- max(6, width)
string <- paste0(strtrim(string, width - 4), "....")
}
string
}
toString(test_matrix)
[1] "1, 3, 2, 4"
toString(test_matrix, rowwise = FALSE)
[1] "1, 2, 3, 4"