ROOT::R::TRInterface &r=ROOT::R::TRInterface::Instance(); TRandom rg; std::vector x(10),y(10); for(int i=0;i<10;i++) { x[i]=i; y[i]=rg.Gaus(); } r["x"]=x; r["y"]=y; if (!gROOT->IsBatch() ) { r<<"dev.new()";//Required to activate new window for plot //Plot parameter. Plotting using two rows and one column r<<"par(mfrow = c(2,1))"; //plotting the points r<<"plot(x, y, main = 'approx(.) and approxfun(.)')"; //The function "approx" returns a list with components x and y //containing n coordinates which interpolate the given data points according to the method (and rule) desired. r<<"points(approx(x, y), col = 2, pch = '*')"; r<<"points(approx(x, y, method = 'constant'), col = 4, pch = '*')"; } else { r << "print('Interpolated points')"; r << "print(approx(x,y,n=20))"; } r<<"f <- approxfun(x, y)"; r<<"fc <- approxfun(x, y, method = 'const')"; if (!gROOT->IsBatch() ) { r<<"curve(f(x), 0, 11, col = 'green2')"; r<<"points(x, y)"; r<<"curve(fc(x), 0, 10, col = 'darkblue', add = TRUE)"; // different interpolation on left and right side : r<<"plot(approxfun(x, y, rule = 2:1), 0, 11,col = 'tomato', add = TRUE, lty = 3, lwd = 2)"; } else { r << "x2=x+0.5"; r << "print('Result of approxfun with default method')"; r << "print(paste('x = ',x,' f(x) = ',f(x2)))"; r << "print('Result of approxfun with const method')"; r << "print(paste('x = ',x,' f(x) = ',fc(x2)))"; }