如何避免R sprintf中的换行符(“非常长的字符串换行符”)?

时间:2015-01-19 05:31:08

标签: r printf

我在sprintf()内有一个非常长的字符串。它是如此之长,以至于它有用(可读性)来打破它(但只在源代码中,而不是在输出中)。但每当我打破长字符串时,它会引入一个\n,因此输出也有一个换行符。如何在源代码中断掉字符串,使其在输出中不被破坏?

3 个答案:

答案 0 :(得分:8)

也许类似下面的内容会很有用(虽然在不知道输入字符串实际外观或者打算如何使用它们的情况下很难分辨)。

Fmt <- c(" %s is %d feet tall.\n", 
         "%s likes chocolate.\n",
         "%s eats %d bars of chocolate", 
         "every night after dinner.")

sprintf(paste(Fmt, collapse = " "), "Sven", 7, "Sven", "He", 3)
# [1] " Sven is 7 feet tall.\n Sven likes chocolate.\n He eats 3 bars of chocolate every night after dinner."
cat(.Last.value)
#  Sven is 7 feet tall.
#  Sven likes chocolate.
#  He eats 3 bars of chocolate every night after dinner.

答案 1 :(得分:1)

使用gsub()执行相关替换,例如,使用单个空格替换连续出现2次或更多次的“空格”字符(包括新行)

> sprintf("string: %s", gsub("[[:space:]]{2,}", " ", "a very
+   long
+   string"))
[1] "string: a very long string"

答案 2 :(得分:0)

使用@Martin给出的概念,但方式略有不同。

> sprintf(gsub("[[:space:]]{2,}"," ","
+         %s is %d feet tall.
+              %s likes chocolate.
+              %s eats %d bars of chocolate 
+              every night after dinner."), "Sven", 7, "Sven", "He", 3)
[1] " Sven is 7 feet tall. Sven likes chocolate. He eats 3 bars of chocolate every night after dinner."
>