rstudio / r2d3

R Interface to D3 Visualizations
https://rstudio.github.io/r2d3
Other
516 stars 105 forks source link

Add a way to provide d3 script as text rather than as a file path, for quick development/testing #51

Open daattali opened 5 years ago

daattali commented 5 years ago

Many functions that require a file input also accept some sort of a text argument. For real production use this won't be recommended, but for making quick little scripts, for reproducibility (sharing a single code chunk online for example), for doing testing, for many little tasks it's useful to be able to do this.

I'm envisioning something like this:

my_r3_code <- "
// !preview r2d3 data=c(0.3, 0.6, 3, 0.95, 0.40, 0.20), width=600

var barHeight = Math.ceil(height / data.length);

svg.selectAll('rect')
  .data(data)
  .enter().append('rect')
    .attr('width', function(d) { return d * width; })
    .attr('height', barHeight)
    .attr('y', function(d, i) { return i * barHeight; })
    .attr('fill', 'steelblue');
"
r2d3(data = c(0.3, 0.6, 0.8, 0.95, 0.40), text = my_r3_code)

Now this can be ran and/or shared as one piece of code rather than mandating the creation of a separate file and saving it to disk and then coordinating finding its path.

edgararuiz-zz commented 5 years ago

As a workaround, I save the script as a file using writeLines() and then read the resulting file in r2d3()

javierluraschi commented 5 years ago

@daattali this is already supported, am I missing something? The only change from the code above is using script instead of text:

my_r3_code <- "
// !preview r2d3 data=c(0.3, 0.6, 3, 0.95, 0.40, 0.20), width=600

var barHeight = Math.ceil(height / data.length);

svg.selectAll('rect')
  .data(data)
  .enter().append('rect')
    .attr('width', function(d) { return d * width; })
    .attr('height', barHeight)
    .attr('y', function(d, i) { return i * barHeight; })
    .attr('fill', 'steelblue');
"
r2d3(data = c(0.3, 0.6, 0.8, 0.95, 0.40), script = my_r3_code)
daattali commented 5 years ago

If that's supposed to work, then yes, that's exactly what I was talking about!

But when I try to run that (Windows 7, R 3.5.2, r2d3 v0.2.3) I get an error

Error in dirname(script) : path too long

I didn't even think of trying that though because the documentation didn't sound like text rather than a script file would work. If this does work, it would be nice if the function documentation made that note.

daattali commented 5 years ago

Update: I just installed the package from github for the latest dev version and I'm still seeing the same error. @javierluraschi are you sure the code you provided works for you? If so, something strange is going on.