Giter Club home page Giter Club logo

Comments (8)

yonicd avatar yonicd commented on May 29, 2024

Thank you for the issue.

I can update that function.

Can you first check if this solves the issue for you.

First set options('encoding'='UTF-8') then run the slick with the htmlwidget.

From the help of readLines

encoding: encoding to be assumed for input strings. It is used to mark character strings as known to be in Latin-1 or UTF-8: it is not used to re-encode the input. To do the latter, specify the encoding as part of the connection con or via options(encoding=): see the examples.

It looks like the original widget has to be encoded correctly, readLines will not change the encoding of the characters.

Can you save one of your widgets say p and paste in the output from dput(p) so i can recreate your issue.

Thanks

from slickr.

matbmeijer avatar matbmeijer commented on May 29, 2024

Hi, thank you for the fast reply!

I am working in an .Rmd file, and I set the encoding to r options('encoding'='UTF-8'), but it did not work - I still get the wrong result.
image

The result from the r dput(p) is the following (p being a formattable htmlwidget converted with as.htmlwidget to htmlwidget). But I don´t believe the problem is here. I believe the environment encoding is set to utf-8, but the functions environment of the slick_div.htmlwidget function not. and the r htmlwidgets::saveWidget(x,file = tf) line might take the default encoding of the system, although I set r options('encoding'='UTF-8') before in the global environment - my pc´s default encoding is ISO-8859-1. Let me know if you need anything else!

structure(list(x = list(html = "<table class=\"table table-condensed\">\n <thead>\n  <tr>\n   <th style=\"text-align:left;\"> &nbsp; </th>\n   <th style=\"text-align:left;\"> pais </th>\n   <th style=\"text-align:right;\"> iso </th>\n   <th style=\"text-align:right;\"> venta_pvp </th>\n   <th style=\"text-align:right;\"> var </th>\n   <th style=\"text-align:right;\"> var_sem_aa </th>\n   <th style=\"text-align:right;\"> Venta 5 semanas </th>\n  </tr>\n </thead>\n<tbody>\n  <tr>\n   <td style=\"text-align:left;\"> <span style=\"color: green\">\n  <i class=\"glyphicon glyphicon-arrow-up\"></i>\n</span> </td>\n   <td style=\"text-align:left;\"> Reino Unido </td>\n   <td style=\"text-align:right;\"> <img src=\"./flags/famfamfam_flag_icons/png/GB.png\"/> </td>\n   <td style=\"text-align:right;\"> <span style=\"display: inline-block; direction: rtl; border-radius: 4px; padding-right: 2px; background-color: lightblue; width: 100.00%\">\20086,523.21</span> </td>\n   <td style=\"text-align:right;\"> <span style=\"color: red\">-41.59%</span> </td>\n   <td style=\"text-align:right;\"> <span style=\"color: green\">30.90%</span> </td>\n   <td style=\"text-align:right;\"> <span id=\"htmlwidget-2ed837169c14053d3620\" class=\"sparkline html-widget\"></span>\n<script type=\"application/json\" data-for=\"htmlwidget-2ed837169c14053d3620\">{\"x\":{\"values\":[0.129222516706108,-0.333751735834021,1.25216021472118,0.315832773712846,-1.28760335131164],\"options\":{\"type\":\"line\",\"height\":20,\"width\":60},\"width\":60,\"height\":20},\"evals\":[],\"jsHooks\":[]}</script> </td>\n  </tr>\n  <tr>\n   <td style=\"text-align:left;\"> <span style=\"color: green\">\n  <i class=\"glyphicon glyphicon-arrow-up\"></i>\n</span> </td>\n   <td style=\"text-align:left;\"> Países Bajos </td>\n   <td style=\"text-align:right;\"> <img src=\"./flags/famfamfam_flag_icons/png/NL.png\"/> </td>\n   <td style=\"text-align:right;\"> <span style=\"display: inline-block; direction: rtl; border-radius: 4px; padding-right: 2px; background-color: lightblue; width: 80.37%\">\20069,536.07</span> </td>\n   <td style=\"text-align:right;\"> <span style=\"color: red\">-18.41%</span> </td>\n   <td style=\"text-align:right;\"> <span style=\"color: green\">47.87%</span> </td>\n   <td style=\"text-align:right;\"> <span id=\"htmlwidget-a1ab8bd512590bdbd37c\" class=\"sparkline html-widget\"></span>\n<script type=\"application/json\" data-for=\"htmlwidget-a1ab8bd512590bdbd37c\">{\"x\":{\"values\":[-0.186751659931056,-1.3476674417042,-0.352432611806132,-0.168420121919685,0.577809053653512],\"options\":{\"type\":\"line\",\"height\":20,\"width\":60},\"width\":60,\"height\":20},\"evals\":[],\"jsHooks\":[]}</script> </td>\n  </tr>\n  <tr>\n   <td style=\"text-align:left;\"> <span style=\"color: green\">\n  <i class=\"glyphicon glyphicon-arrow-up\"></i>\n</span> </td>\n   <td style=\"text-align:left;\"> Portugal </td>\n   <td style=\"text-align:right;\"> <img src=\"./flags/famfamfam_flag_icons/png/PT.png\"/> </td>\n   <td style=\"text-align:right;\"> <span style=\"display: inline-block; direction: rtl; border-radius: 4px; padding-right: 2px; background-color: lightblue; width: 61.52%\">\20053,227.11</span> </td>\n   <td style=\"text-align:right;\"> <span style=\"color: green\">19.47%</span> </td>\n   <td style=\"text-align:right;\"> <span style=\"color: red\">-34.64%</span> </td>\n   <td style=\"text-align:right;\"> <span id=\"htmlwidget-ecc018d4db37931c37da\" class=\"sparkline html-widget\"></span>\n<script type=\"application/json\" data-for=\"htmlwidget-ecc018d4db37931c37da\">{\"x\":{\"values\":[0.625674855852418,-1.24886595248823,-1.93165171731139,0.266382358557024,0.295752370655017],\"options\":{\"type\":\"line\",\"height\":20,\"width\":60},\"width\":60,\"height\":20},\"evals\":[],\"jsHooks\":[]}</script> </td>\n  </tr>\n  <tr>\n   <td style=\"text-align:left;\"> <span style=\"color: green\">\n  <i class=\"glyphicon glyphicon-arrow-up\"></i>\n</span> </td>\n   <td style=\"text-align:left;\"> Turquía </td>\n   <td style=\"text-align:right;\"> <img src=\"./flags/famfamfam_flag_icons/png/TR.png\"/> </td>\n   <td style=\"text-align:right;\"> <span style=\"display: inline-block; direction: rtl; border-radius: 4px; padding-right: 2px; background-color: lightblue; width: 60.41%\">\20052,267.94</span> </td>\n   <td style=\"text-align:right;\"> <span style=\"color: green\">6.05%</span> </td>\n   <td style=\"text-align:right;\"> <span style=\"color: red\">-0.62%</span> </td>\n   <td style=\"text-align:right;\"> <span id=\"htmlwidget-e561c3025cc6231b395d\" class=\"sparkline html-widget\"></span>\n<script type=\"application/json\" data-for=\"htmlwidget-e561c3025cc6231b395d\">{\"x\":{\"values\":[0.93287421664541,1.47717744948537,-0.27039190120818,0.380234557105465,-0.979703869875312],\"options\":{\"type\":\"line\",\"height\":20,\"width\":60},\"width\":60,\"height\":20},\"evals\":[],\"jsHooks\":[]}</script> </td>\n  </tr>\n  <tr>\n   <td style=\"text-align:left;\"> <span style=\"color: green\">\n  <i class=\"glyphicon glyphicon-arrow-up\"></i>\n</span> </td>\n   <td style=\"text-align:left;\"> Rusia </td>\n   <td style=\"text-align:right;\"> <img src=\"./flags/famfamfam_flag_icons/png/RU.png\"/> </td>\n   <td style=\"text-align:right;\"> <span style=\"display: inline-block; direction: rtl; border-radius: 4px; padding-right: 2px; background-color: lightblue; width: 57.36%\">\20049,631.10</span> </td>\n   <td style=\"text-align:right;\"> <span style=\"color: red\">-9.57%</span> </td>\n   <td style=\"text-align:right;\"> <span style=\"color: green\">27.14%</span> </td>\n   <td style=\"text-align:right;\"> <span id=\"htmlwidget-9f9d2b33694e2bf480de\" class=\"sparkline html-widget\"></span>\n<script type=\"application/json\" data-for=\"htmlwidget-9f9d2b33694e2bf480de\">{\"x\":{\"values\":[-1.04183046898614,-0.76610759069263,0.120323922114076,0.573343077752449,-1.19292747633278],\"options\":{\"type\":\"line\",\"height\":20,\"width\":60},\"width\":60,\"height\":20},\"evals\":[],\"jsHooks\":[]}</script> </td>\n  </tr>\n  <tr>\n   <td style=\"text-align:left;\"> <span style=\"color: red\">\n  <i class=\"glyphicon glyphicon-arrow-down\"></i>\n</span> </td>\n   <td style=\"text-align:left;\"> Francia </td>\n   <td style=\"text-align:right;\"> <img src=\"./flags/famfamfam_flag_icons/png/FR.png\"/> </td>\n   <td style=\"text-align:right;\"> <span style=\"display: inline-block; direction: rtl; border-radius: 4px; padding-right: 2px; background-color: lightblue; width: 49.54%\">\20042,864.83</span> </td>\n   <td style=\"text-align:right;\"> <span style=\"color: red\">-46.26%</span> </td>\n   <td style=\"text-align:right;\"> <span style=\"color: green\">7.69%</span> </td>\n   <td style=\"text-align:right;\"> <span id=\"htmlwidget-b918cda80e322ec06e10\" class=\"sparkline html-widget\"></span>\n<script type=\"application/json\" data-for=\"htmlwidget-b918cda80e322ec06e10\">{\"x\":{\"values\":[0.630480830981316,1.31792287456568,1.66387528804368,0.823225211785445,0.177430898037216],\"options\":{\"type\":\"line\",\"height\":20,\"width\":60},\"width\":60,\"height\":20},\"evals\":[],\"jsHooks\":[]}</script> </td>\n  </tr>\n  <tr>\n   <td style=\"text-align:left;\"> <span style=\"color: green\">\n  <i class=\"glyphicon glyphicon-arrow-up\"></i>\n</span> </td>\n   <td style=\"text-align:left;\"> Italia </td>\n   <td style=\"text-align:right;\"> <img src=\"./flags/famfamfam_flag_icons/png/IT.png\"/> </td>\n   <td style=\"text-align:right;\"> <span style=\"display: inline-block; direction: rtl; border-radius: 4px; padding-right: 2px; background-color: lightblue; width: 41.15%\">\20035,607.10</span> </td>\n   <td style=\"text-align:right;\"> <span style=\"color: green\">18.12%</span> </td>\n   <td style=\"text-align:right;\"> <span style=\"color: red\">-33.66%</span> </td>\n   <td style=\"text-align:right;\"> <span id=\"htmlwidget-4d00d145cc9b75674135\" class=\"sparkline html-widget\"></span>\n<script type=\"application/json\" data-for=\"htmlwidget-4d00d145cc9b75674135\">{\"x\":{\"values\":[-0.439646993359681,-0.210095420899838,-0.138974677992052,-0.842060808737506,-0.0195762027592767],\"options\":{\"type\":\"line\",\"height\":20,\"width\":60},\"width\":60,\"height\":20},\"evals\":[],\"jsHooks\":[]}</script> </td>\n  </tr>\n  <tr>\n   <td style=\"text-align:left;\"> <span style=\"color: green\">\n  <i class=\"glyphicon glyphicon-arrow-up\"></i>\n</span> </td>\n   <td style=\"text-align:left;\"> Suiza </td>\n   <td style=\"text-align:right;\"> <img src=\"./flags/famfamfam_flag_icons/png/CH.png\"/> </td>\n   <td style=\"text-align:right;\"> <span style=\"display: inline-block; direction: rtl; border-radius: 4px; padding-right: 2px; background-color: lightblue; width: 33.85%\">\20029,291.57</span> </td>\n   <td style=\"text-align:right;\"> <span style=\"color: green\">49.45%</span> </td>\n   <td style=\"text-align:right;\"> <span style=\"color: red\">-21.86%</span> </td>\n   <td style=\"text-align:right;\"> <span id=\"htmlwidget-086ee522bf17bb29d7c2\" class=\"sparkline html-widget\"></span>\n<script type=\"application/json\" data-for=\"htmlwidget-086ee522bf17bb29d7c2\">{\"x\":{\"values\":[-1.20591651220131,0.217036244020289,-0.964415935325414,-0.464724225094459,-0.16377436030302],\"options\":{\"type\":\"line\",\"height\":20,\"width\":60},\"width\":60,\"height\":20},\"evals\":[],\"jsHooks\":[]}</script> </td>\n  </tr>\n  <tr>\n   <td style=\"text-align:left;\"> <span style=\"color: red\">\n  <i class=\"glyphicon glyphicon-arrow-down\"></i>\n</span> </td>\n   <td style=\"text-align:left;\"> Alemania </td>\n   <td style=\"text-align:right;\"> <img src=\"./flags/famfamfam_flag_icons/png/DE.png\"/> </td>\n   <td style=\"text-align:right;\"> <span style=\"display: inline-block; direction: rtl; border-radius: 4px; padding-right: 2px; background-color: lightblue; width: 22.70%\">\20019,642.11</span> </td>\n   <td style=\"text-align:right;\"> <span style=\"color: red\">-48.00%</span> </td>\n   <td style=\"text-align:right;\"> <span style=\"color: green\">26.55%</span> </td>\n   <td style=\"text-align:right;\"> <span id=\"htmlwidget-a88d946c1be1ce4617a2\" class=\"sparkline html-widget\"></span>\n<script type=\"application/json\" data-for=\"htmlwidget-a88d946c1be1ce4617a2\">{\"x\":{\"values\":[0.499010010418921,1.01893338067913,0.814957841022739,0.285716446046778,1.13555074473718],\"options\":{\"type\":\"line\",\"height\":20,\"width\":60},\"width\":60,\"height\":20},\"evals\":[],\"jsHooks\":[]}</script> </td>\n  </tr>\n  <tr>\n   <td style=\"text-align:left;\"> <span style=\"color: green\">\n  <i class=\"glyphicon glyphicon-arrow-up\"></i>\n</span> </td>\n   <td style=\"text-align:left;\"> España </td>\n   <td style=\"text-align:right;\"> <img src=\"./flags/famfamfam_flag_icons/png/ES.png\"/> </td>\n   <td style=\"text-align:right;\"> <span style=\"display: inline-block; direction: rtl; border-radius: 4px; padding-right: 2px; background-color: lightblue; width: 14.54%\">\20012,577.88</span> </td>\n   <td style=\"text-align:right;\"> <span style=\"color: red\">-34.20%</span> </td>\n   <td style=\"text-align:right;\"> <span style=\"color: green\">16.73%</span> </td>\n   <td style=\"text-align:right;\"> <span id=\"htmlwidget-64d11c617e6ecb61cf96\" class=\"sparkline html-widget\"></span>\n<script type=\"application/json\" data-for=\"htmlwidget-64d11c617e6ecb61cf96\">{\"x\":{\"values\":[-0.954692098419231,0.690313314431393,-0.372651951187344,0.775325127666857,-1.75294586620624],\"options\":{\"type\":\"line\",\"height\":20,\"width\":60},\"width\":60,\"height\":20},\"evals\":[],\"jsHooks\":[]}</script> </td>\n  </tr>\n</tbody>\n</table>"), 
    width = "100%", height = "90%", sizingPolicy = list(defaultWidth = NULL, 
        defaultHeight = NULL, padding = NULL, viewer = list(defaultWidth = NULL, 
            defaultHeight = NULL, padding = NULL, fill = TRUE, 
            suppress = FALSE, paneHeight = NULL), browser = list(
            defaultWidth = NULL, defaultHeight = NULL, padding = NULL, 
            fill = FALSE, external = FALSE), knitr = list(defaultWidth = NULL, 
            defaultHeight = NULL, figure = TRUE)), dependencies = list(
        structure(list(name = "htmlwidgets", version = "1.3", 
            src = list(file = "C:/Users/03739660/OneDrive - Mango/Documentos/R/R-3.6.1/library/htmlwidgets/www"), 
            meta = NULL, script = "htmlwidgets.js", stylesheet = NULL, 
            head = NULL, attachment = NULL, package = NULL, all_files = TRUE), class = "html_dependency"), 
        structure(list(name = "jquery", version = "1.11.3", src = list(
            file = "C:/Users/03739660/OneDrive - Mango/Documentos/R/R-3.6.1/library/sparkline/htmlwidgets/lib/jquery"), 
            meta = NULL, script = "jquery.min.js", stylesheet = NULL, 
            head = NULL, attachment = NULL, package = NULL, all_files = TRUE), class = "html_dependency"), 
        structure(list(name = "jquery-sparkline", version = "2.1.2", 
            src = list(file = "C:/Users/03739660/OneDrive - Mango/Documentos/R/R-3.6.1/library/sparkline/htmlwidgets/lib/jquery.sparkline"), 
            meta = NULL, script = "jquery.sparkline.js", stylesheet = "jquery.sparkline.css", 
            head = NULL, attachment = NULL, package = NULL, all_files = TRUE), class = "html_dependency"), 
        structure(list(name = "sparkline-binding", version = "2.0", 
            src = list(file = "C:/Users/03739660/OneDrive - Mango/Documentos/R/R-3.6.1/library/sparkline/htmlwidgets"), 
            meta = NULL, script = "sparkline.js", stylesheet = NULL, 
            head = NULL, attachment = NULL, package = NULL, all_files = FALSE), class = "html_dependency")), 
    elementId = NULL, preRenderHook = NULL, jsHooks = list()), class = c("formattable_widget", 
"htmlwidget"), package = "formattable")
```r

from slickr.

yonicd avatar yonicd commented on May 29, 2024

sure thing.

can you please set the saveWidget to selfContained=TRUE please. the paths in the structure are local.

thanks

from slickr.

matbmeijer avatar matbmeijer commented on May 29, 2024

Hi @yonicd,

I don´t understand very well what you mean. Do you mean to add in your r slick_div.htmlwidget the r selfContained=TRUE? Sorry, I am a little bit confused. If you don´t mind to elaborate on that. BY the way, thank you very much for the package, I am using it with flexdashboard and it creates amazing dashboards.

from slickr.

yonicd avatar yonicd commented on May 29, 2024

My apologies. In the htmlwidgets::saveWidget there is an additional argument called selfContained. https://github.com/ramnathv/htmlwidgets/blob/master/R/savewidget.R#L7

That is great news that the package is helping in shiny, thank you for sharing that 👍

from slickr.

matbmeijer avatar matbmeijer commented on May 29, 2024

My apologies. In the htmlwidgets::saveWidget there is an additional argument called selfContained. https://github.com/ramnathv/htmlwidgets/blob/master/R/savewidget.R#L7

¿If I understand it correctly it´s a change that needs to be made in your code:
https://github.com/metrumresearchgroup/slickR/blob/master/R/slick_div.R:

Current code:

#' @importFrom htmlwidgets saveWidget
#' @importFrom htmltools css
#' @export
slick_div.htmlwidget <- function(
  x,
  css = htmltools::css(marginLeft='auto',marginRight='auto'),
  type = 'iframe',
  links = NULL
){
  
  tf <- tempfile(fileext = '.html') 
  on.exit(unlink(tf,force = TRUE))
  htmlwidgets::saveWidget(x,file = tf)
  x_chr <- paste0(readLines(tf),collapse='\n')
  slick_tag(type,varArgs = list(srcdoc = x_chr, style = css))
}

Necessary change:

#' @importFrom htmlwidgets saveWidget
#' @importFrom htmltools css
#' @export
slick_div.htmlwidget <- function(
  x,
  css = htmltools::css(marginLeft='auto',marginRight='auto'),
  type = 'iframe',
  links = NULL
){
  
  tf <- tempfile(fileext = '.html') 
  on.exit(unlink(tf,force = TRUE))
  htmlwidgets::saveWidget(x,file = tf, selfContained=TRUE)
  x_chr <- paste0(readLines(tf),collapse='\n')
  slick_tag(type,varArgs = list(srcdoc = x_chr, style = css))
}

Nonetheless, I tried the change to see if it worked and unfortunately it didn't , so I would go back to my initial proposal of permitting to set the encoding of readLines()

from slickr.

yonicd avatar yonicd commented on May 29, 2024

I need to be able to reproduce your error in order to find the correct solution.

Please either use reprex with your example or supply the data that is going into the slickR function that is creating the problem with the call that you are running.

Thanks

from slickr.

yonicd avatar yonicd commented on May 29, 2024

I played around with encoding a bit to see how options('encoding') can be leveraged without needing to change slick_div.htmlwidget

From what I can see the readLines respects the options('encoding')

From the documentation in ?Encoding ISO-8859-1 is referred to as latin1

There is some ambiguity as to what is meant by a ‘Latin-1’ locale, since some OSes (notably Windows) make use of character positions used for control characters in the ISO 8859-1 character set. How such characters are interpreted is system-dependent but as from R 3.5.0 they are if possible interpreted as per Windows codepage 1252 (which Microsoft calls ‘Windows Latin 1 (ANSI)’) when converting to e.g. UTF-8.

options('encoding')
#> $encoding
#> [1] "native.enc"
x <- 'fa\xE7ile'
iconv(x,to = 'UTF-8',from = 'latin1')
#> [1] "façile"
tf <- tempfile(fileext = '.txt')
writeLines(x,con = tf)
readLines(tf)
#> [1] "fa\xe7ile"
readLines(tf,encoding = 'UTF-8')
#> [1] "fa\xe7ile"
readLines(tf,encoding = 'latin1')
#> [1] "façile"
options(encoding = 'latin1')
readLines(tf)
#> [1] "façile"
unlink(tf)
options(encoding = 'native.enc')
details::details(sessioninfo::session_info(),summary = 'session info')
session info
Session info ──────────────────────────────────────────────────────────
 setting  value                       
 version  R version 3.6.1 (2019-07-05)
 os       macOS Mojave 10.14.5        
 system   x86_64, darwin15.6.0        
 ui       X11                         
 language (EN)                        
 collate  en_US.UTF-8                 
 ctype    en_US.UTF-8                 
 tz       America/New_York            
 date     2020-02-13Packages ──────────────────────────────────────────────────────────────
 package     * version    date       lib source                         
 assertthat    0.2.1      2019-03-21 [1] CRAN (R 3.6.0)                 
 backports     1.1.5      2019-10-02 [1] CRAN (R 3.6.0)                 
 cli           2.0.1      2020-01-08 [1] CRAN (R 3.6.0)                 
 clipr         0.7.0      2019-07-23 [1] CRAN (R 3.6.0)                 
 crayon        1.3.4      2017-09-16 [1] CRAN (R 3.6.0)                 
 desc          1.2.0      2019-12-01 [1] Github (r-lib/desc@61205f6)    
 details       0.2.1      2020-01-12 [1] local                          
 digest        0.6.23     2019-11-23 [1] CRAN (R 3.6.0)                 
 evaluate      0.14       2019-05-28 [1] CRAN (R 3.6.0)                 
 fansi         0.4.1      2020-01-08 [1] CRAN (R 3.6.0)                 
 glue          1.3.1.9000 2020-02-07 [1] Github (tidyverse/glue@7131fc3)
 highr         0.8        2019-03-20 [1] CRAN (R 3.6.0)                 
 htmltools     0.4.0      2019-10-04 [1] CRAN (R 3.6.0)                 
 httr          1.4.1      2019-08-05 [1] CRAN (R 3.6.0)                 
 knitr         1.25       2019-09-18 [1] CRAN (R 3.6.0)                 
 magrittr      1.5        2014-11-22 [1] CRAN (R 3.6.0)                 
 png           0.1-7      2013-12-03 [1] CRAN (R 3.6.0)                 
 R6            2.4.1      2019-11-12 [1] CRAN (R 3.6.0)                 
 Rcpp          1.0.3      2019-11-08 [1] CRAN (R 3.6.1)                 
 rlang         0.4.4      2020-01-28 [1] CRAN (R 3.6.1)                 
 rmarkdown     2.0        2019-12-12 [1] CRAN (R 3.6.0)                 
 rprojroot     1.3-2      2018-01-03 [1] CRAN (R 3.6.0)                 
 sessioninfo   1.1.1      2018-11-05 [1] CRAN (R 3.6.0)                 
 stringi       1.4.3      2019-03-12 [1] CRAN (R 3.6.0)                 
 stringr       1.4.0      2019-02-10 [1] CRAN (R 3.6.0)                 
 withr         2.1.2      2018-03-15 [1] CRAN (R 3.6.0)                 
 xfun          0.10       2019-10-01 [1] CRAN (R 3.6.0)                 
 xml2          1.2.2      2019-08-09 [1] CRAN (R 3.6.0)                 
 yaml          2.2.1      2020-02-01 [1] CRAN (R 3.6.0)                 

[1] /Library/Frameworks/R.framework/Versions/3.6/Resources/library

Created on 2020-02-13 by the reprex package (v0.3.0)

from slickr.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.