0

我有以下变量:

min.v<-5
max.v<-10

我想给以下信息

Test this. You entered "5 10" 

这可以用message()or打印吗paste(),因为这两个函数都将引号视为字符串。消息中的变量应该在双引号内

我试过message(as.character(paste(min.v, " ",max.v)))了,但双引号被忽略了。

这个问题可能与在 R 中解决双引号内的双引号问题完全相反

4

3 回答 3

8

你有两个三个选项来做这个

选项 1:转义引号。为此,您必须使用\".

cat("You entered ", "\"", min.v, " ", max.v,"\"", sep="")
You entered "5 10"

选项 2:将双引号嵌入单引号中:

cat("You entered ", '"', min.v, " ", max.v,'"', sep="")
You entered "5 10"

编辑: 感谢@baptiste,努力使这个答案全面

选项3:使用功能dQuote()

options(useFancyQuotes=FALSE)
cat("You entered ", dQuote(paste(min.v, max.v)), sep="")
You entered "5 10"
于 2012-06-24T16:37:47.590 回答
4
x = 5; y = "indeed"
message("you entered ", dQuote(x))
message("you entered ", dQuote(paste(x, y)))
于 2012-06-24T19:27:20.820 回答
0

虽然sprintf可能会变得相当复杂,但我发现代码通常比大多数其他选项更整洁。本质上,您有一条消息要在要插入变量值的位置进行格式化——这sprintf是为了:

min.v <- 5
max.v <- 10
msg <- 'Test this. You entered "%i %i"\n'
str <- sprintf(msg, min.v, max.v) #generates string
cat(str) #to output
# or message(str)

%i是期望整数值的占位符,有关详细信息,请参阅?sprintfpaste虽然这个解决方案仍然依赖于用单引号括起来的双引号,但是你得到的代码比直接使用or时更易读cat

于 2018-02-02T15:56:30.650 回答