Sim*_*lon 8 syntax graphics plot r plotmath
在为plotmath情节标题提供表达时,我觉得它的paste效果就像paste,但现在我不确定.它是plotmath函数的特殊参数吗?在plotmath paste()行为就像paste0()和paste0被直接引用,而sep的论点paste()被忽略,但在表达没有报价.怎么paste()解释?请参阅以下四个示例:
# Data to plot
x <- seq( 55 , 70 , length = 2001 )
probs <- dexp( x , rate = 5 / 60 )
s <- sample( x , 10000 , prob = probs , repl = TRUE )
# Some plots
par(mfrow = c(2,2) )
#1) paste() behaves like paste0() here
hist( s , breaks = 30 ,
main = expression( paste( "1: Sampling of" , Phi , "Distribution" ) ) ,
xlab = "No spaces in title using paste()" , axes = F )
#2) add spaces in the expression where they are needed
hist( s , breaks = 30 ,
main = expression( paste( "2: Sampling of " , Phi , " Distribution" ) ) ,
xlab = "Single spaces in titles: paste() behaves like paste0()" , axes = F )
#3) Don't put spaces, use a sep argument - ignored
hist( s , breaks = 30 ,
main = expression( paste( "3: Sampling of" , Phi , "Distribution" , sep = " " ) ) ,
xlab = "No spaces using paste(), `sep` argument is ignored but not quoted in expression" , axes = F )
#4) paste0 is not recognised
hist( s , breaks = 30 ,
main = expression( paste0( "4: Sampling of " , Phi , " Distribution" ) ) ,
xlab = "paste0() not recognised" , axes = F )
Run Code Online (Sandbox Code Playgroud)

确实paste在情节上不是经典paste。见?plotmath:
paste(x,y,z)将x,y和z并置
paste在plotmath没有sep参数的情况下。
在源代码中,plotmath.c您可以看到它paste已重新定义:
/*----------------------------------------------------------------------
*
* Code for Concatenate Expressions
*
*/
static int ConcatenateAtom(SEXP expr)
{
return NameAtom(expr) && NameMatch(expr, "paste");
}
static BBOX RenderConcatenate(SEXP expr, int draw, mathContext *mc,
pGEcontext gc, pGEDevDesc dd)
{
BBOX bbox = NullBBox();
int i, n;
expr = CDR(expr);
n = length(expr);
for (i = 0; i < n; i++) {
bbox = CombineBBoxes(bbox, RenderElement(CAR(expr), draw, mc, gc, dd));
if (i != n - 1)
bbox = RenderItalicCorr(bbox, draw, mc, gc, dd);
expr = CDR(expr);
}
return bbox;
}
Run Code Online (Sandbox Code Playgroud)
稍后在文件中调度:
static BBOX RenderFormula(SEXP expr, int draw, mathContext *mc,
pGEcontext gc, pGEDevDesc dd)
{
SEXP head = CAR(expr);
....
else if (ConcatenateAtom(head))
return RenderConcatenate(expr, draw, mc, gc, dd);
....
Run Code Online (Sandbox Code Playgroud)
(话虽这么说,我对C一无所知,所以我可能错了)