使用cat输出向量元素序列

时间:2018-07-06 13:49:06

标签: r cat

我需要使用R中的cat函数获取某些输出语句。我编写了以下代码

it <-1
w <- c(1,2,3)
cat("\nUsing the eq(s)",w,"the iter is:",it,"\n",sep=",")

这给了我以下内容

Using the eq(s),1,2,3,the iter is:,1,

如果需要您的帮助,我需要获得此输出

Using the eq(s) 1, 2 and 3, the iter is: 1

谢谢

2 个答案:

答案 0 :(得分:2)

更具通用性(对于length(w) != 3而言):

enlist <- function(x) {
  n <- length(x)
  if (n <= 1) return(x)
  paste(toString(x[-n]), "and", x[n])
}

cat("Using the eq(s) ", enlist(w), ", the iter is: ", it, "\n", sep = "")
Using the eq(s) 1, 2 and 3, the iter is: 1

答案 1 :(得分:1)

1)普通猫尝试一下:

cat("\nUsing the eq(s) ", toString(head(w, -1))," and ", tail(w, 1), 
  ", the iter is: ", it, "\n", sep = "")

给予:

Using the eq(s) 1, 2 and 3, the iter is: 1

1a)。此变体使用toString,然后用and替换最后一个逗号。它的优点是即使w的长度为1也可以使用。

cat("\nUsing the eq(s) ", sub("(.*),(.*)", "\\1 and \\2", toString(w)),
   ", the iter is: ", it, "\n", sep = "")

其余解决方案也可以使用此想法,但我们仅将它们显示为(1)的变体。

2)sprintf :另一种方法是像这样使用sprintf

s <- sprintf("\nUsing the eq(s) %s and %d, the iter is: %d\n", 
       toString(head(w, -1)), tail(w, 1), it)
cat(s)

3)fn $ 另一种方法是gsubfn中的fn$。如果像f那样在函数fn$f前面加上一个前缀,则将对参数进行字符串插值。

library(gsubfn)

fn$cat(
  "\nUsing the eq(s) `toString(head(w, -1))` and `tail(w, 1)`, the iter: is $it\n"
)