我有以下变量:
min.v<-5
max.v<-10
我想给以下信息
Test this. You entered "5 10"
这可以用message()
or打印吗paste()
,因为这两个函数都将引号视为字符串。消息中的变量应该在双引号内
我试过message(as.character(paste(min.v, " ",max.v)))
了,但双引号被忽略了。
这个问题可能与在 R 中解决双引号内的双引号问题完全相反
我有以下变量:
min.v<-5
max.v<-10
我想给以下信息
Test this. You entered "5 10"
这可以用message()
or打印吗paste()
,因为这两个函数都将引号视为字符串。消息中的变量应该在双引号内
我试过message(as.character(paste(min.v, " ",max.v)))
了,但双引号被忽略了。
这个问题可能与在 R 中解决双引号内的双引号问题完全相反
你有两个三个选项来做这个
选项 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"
x = 5; y = "indeed"
message("you entered ", dQuote(x))
message("you entered ", dQuote(paste(x, y)))
虽然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
是期望整数值的占位符,有关详细信息,请参阅?sprintf
。paste
虽然这个解决方案仍然依赖于用单引号括起来的双引号,但是你得到的代码比直接使用or时更易读cat
。