为什么替换函数更改noquote文本到字符串[r]

Ima*_*man 14 r

我想回答一个关于plotmath的问题但是我没有得到我想要的替代输出.我想要的输出:plotmath
我得到了什么:substitute

text<-'paste(italic(yes),"why not?")'
text
[1] "paste(italic(yes),\"why not?\")"
noqoute_text<-noquote(text)
noqoute_text
[1] paste(italic(yes),"why not?")
sub<-substitute(paste("Hi",noqoute_text),
           env=list(noqoute_text=noqoute_text))
sub
paste("Hi", "paste(italic(yes),\"why not?\")")
Run Code Online (Sandbox Code Playgroud)

Moo*_*per 12

你使用了错误的功能,parse而不是使用noquote:

text<-'paste(italic(yes),"why not?")'
noquote_text <- parse(text=text)[[1]]

sub<- substitute(paste("Hi",noquote_text),env=list(noquote_text= noquote_text))
# paste("Hi", paste(italic(yes), "why not?"))
Run Code Online (Sandbox Code Playgroud)

noquote 只是将类应用于character类型的对象,使用特定的打印方法不显示引号.

str(noquote("a"))
Class 'noquote'  chr "a"
unclass(noquote("a"))
[1] "a"
Run Code Online (Sandbox Code Playgroud)

你能详细说明你的答案吗?

在R中,你应该小心对象中的内容与打印的内容之间的区别.

class是什么:

  • 添加character到对象的class属性
  • 而已

代码是:

function (obj) 
{
    if (!inherits(obj, "noquote")) 
        class(obj) <- c(attr(obj, "class"), "noquote")
    obj
}
Run Code Online (Sandbox Code Playgroud)

然后当你打印它时,方法print:

  • noquote如果它在那里,则从对象中删除该类
  • 调用"noquote"的说法print.noquote
  • 而已

你也可以实际调用"noquote"一个字符串:

print.noquote("a")
[1] a
Run Code Online (Sandbox Code Playgroud)

它以类似的方式打印的print或者quote = FALSE会,但它是一个完全不同的野兽.

在您尝试的代码中,您一直在替换字符串而不是调用.