2

假设我有以下功能:

sqrt_x = function(x) {
     sqrtx = x^0.5
     return(list("sqrtx" = sqrt))
}  
attr(sqrt_x, "comment") <- "This is a comment to be placed on two different lines"

如果我输入

comment(sqrt_x) 

我明白了

[1] "This is a comment to be placed on two different lines"

然而,我想要的是评论在两个不同的行上返回(它也可以是更多的行和不同的评论元素。任何想法都值得赞赏。

4

3 回答 3

3

正如安德烈所说:您需要插入换行符。

如果您不想手动指定换行符的位置,那么您可以使用strwrap在方便的点创建中断,以便您的字符串不超过指定的宽度。

msg <- strwrap("This is a comment to be placed on two different lines", width = 20)
cat(msg, sep = "\n")
# This is a comment
# to be placed on two
# different lines

一个完整的解决方案可能类似于:

#Add comment as normal
comment(sqrt_x) <- "This is a comment to be placed on two different lines"

#Display using this function
multiline_comment <- function(x, width = getOption("width") - 1L)
{
  cat(strwrap(comment(x), width = width), sep = "\n")
}

multiline_comment(
  sqrt_x, 
  20
)
于 2013-01-16T15:07:00.090 回答
2

您可以使用\n插入换行符。该cat方法以您想要的方式显示:

attr(sqrt_x, "comment") <- "This is a comment to be placed on two\ndifferent lines"
cat(comment(sqrt_x))

This is a comment to be placed on two
different lines
于 2013-01-16T15:01:59.773 回答
0

这有点小技巧,也许不是你想要的,但如果你提供一个多元素character向量,并且行足够长以至于 R 的默认格式决定它们应该在多行上,你可能会得到你想要的:

comment(sqrt_x) <- c("This is a comment                       ",
                     "to be placed on two different lines")
comment(sqrt_x)
## [1] "This is a comment                       "
## [2] "to be placed on two different lines"

您可以使用format自动填充:

comment(sqrt_x) <- format(c("This is a comment",
                            "to be placed on two different lines"),
                             width=50)

(如其他地方所示,您也可以使用strwrap()将单个长字符串分解为多个部分)

comment如果您非常渴望拥有它并且您不喜欢额外的空格,您可以使用 @RichieCotton 的多行版本之类的东西来掩盖内置函数:

comment <- function(x,width = getOption("width") - 1L) {
   cat(strwrap(base::comment(x), width = width), sep = "\n")
}

但这可能是个坏主意。

于 2013-01-16T16:35:19.843 回答