<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Arquivos Rodrigo Barbosa - Estatidados</title>
	<atom:link href="http://estatidados.com.br/category/professores-colaboradores/rodrigo-barbosa/feed/" rel="self" type="application/rss+xml" />
	<link>http://estatidados.com.br</link>
	<description>Comunidade de Estatística</description>
	<lastBuildDate>Thu, 09 Jun 2022 20:11:55 +0000</lastBuildDate>
	<language>pt-BR</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.0</generator>
	<item>
		<title>Criando um aplicativo desktop em Shiny</title>
		<link>http://estatidados.com.br/criando-um-aplicativo-desktop-em-shiny/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=criando-um-aplicativo-desktop-em-shiny</link>
					<comments>http://estatidados.com.br/criando-um-aplicativo-desktop-em-shiny/#respond</comments>
		
		<dc:creator><![CDATA[admin]]></dc:creator>
		<pubDate>Mon, 28 Sep 2020 16:28:59 +0000</pubDate>
				<category><![CDATA[Linguagens de programação]]></category>
		<category><![CDATA[Rodrigo Barbosa]]></category>
		<guid isPermaLink="false">http://estatidados.com.br/?p=429</guid>

					<description><![CDATA[<p>Como um frequente usuário do R, em certo momento questionei como criar um aplicativo Shiny executável em desktop, sem a dependência de instalação prévia do R e dos pacotes utilizados. Encontrei dois excelentes artigos que apresentam algumas passibilidades: Deploying Desktop Apps<a class="leiamais" href="http://estatidados.com.br/criando-um-aplicativo-desktop-em-shiny/" title="Criando um aplicativo desktop em Shiny">...[Continuar lendo]</a></p>
<p>O post <a rel="nofollow" href="http://estatidados.com.br/criando-um-aplicativo-desktop-em-shiny/">Criando um aplicativo desktop em Shiny</a> apareceu primeiro em <a rel="nofollow" href="http://estatidados.com.br">Estatidados</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<figure class="wp-block-image size-large"><img width="1024" height="467" src="http://estatidados.com.br/wp-content/uploads/2020/09/0-3-1024x467.png" alt="" class="wp-image-430" srcset="http://estatidados.com.br/wp-content/uploads/2020/09/0-3-1024x467.png 1024w, http://estatidados.com.br/wp-content/uploads/2020/09/0-3-300x137.png 300w, http://estatidados.com.br/wp-content/uploads/2020/09/0-3-768x350.png 768w, http://estatidados.com.br/wp-content/uploads/2020/09/0-3-200x91.png 200w, http://estatidados.com.br/wp-content/uploads/2020/09/0-3-400x182.png 400w, http://estatidados.com.br/wp-content/uploads/2020/09/0-3-1000x456.png 1000w, http://estatidados.com.br/wp-content/uploads/2020/09/0-3-1042x475.png 1042w, http://estatidados.com.br/wp-content/uploads/2020/09/0-3.png 1316w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>



<p>Como um frequente usuário do R, em certo momento questionei como criar um aplicativo Shiny executável em desktop, sem a dependência de instalação prévia do R e dos pacotes utilizados. Encontrei dois excelentes artigos que apresentam algumas passibilidades: <a rel="noreferrer noopener" href="https://www.r-bloggers.com/2014/04/deploying-desktop-apps-with-r/" target="_blank">Deploying Desktop Apps with R</a> e <a rel="noreferrer noopener" href="http://blog.analytixware.com/2014/03/packaging-your-shiny-app-as-windows.html" target="_blank">Packaging your Shiny App as an Windows desktop app</a>.</p>



<p>Após algumas tentativas, criei uma &#8220;receita de bolo&#8221; que funcionou bem para mim. Irei compartilhá-la aqui, sem me preocupar com o motivo de algumas etapas, pois foram bem detalhados nos artigos citados. Este processo foi feito no Windows, mas deve ser semelhante para Linux ou macOS (nunca testei).</p>



<p><strong>1 &#8211; Esqueleto</strong></p>



<p><strong>1.1.</strong>&nbsp;Criar uma pasta para estruturar o aplicativo:</p>



<figure class="wp-block-image"><img src="https://media-exp1.licdn.com/dms/image/C4D12AQE7TzutQ40b1Q/article-inline_image-shrink_1000_1488/0?e=1606953600&amp;v=beta&amp;t=PPZTd_tmdKcckOlSkIIDFMO5Mj5JIXuA0NcTQAHGQ2A" alt="Não foi fornecido texto alternativo para esta imagem"/></figure>



<p><strong>1.2.</strong>&nbsp;Baixar o&nbsp;<a href="https://sourceforge.net/projects/rportable/" target="_blank" rel="noreferrer noopener">R Portable</a>&nbsp;e instalar na pasta&nbsp;<em>executavel/</em>:</p>



<figure class="wp-block-image"><img src="https://media-exp1.licdn.com/dms/image/C4D12AQFudHeNpMRb0w/article-inline_image-shrink_1000_1488/0?e=1606953600&amp;v=beta&amp;t=rTGilXZ91WLY6F6a3hoADB03ZJ1E11YrDvIxwhI1vKs" alt="Não foi fornecido texto alternativo para esta imagem"/></figure>



<p>Permitirá utilizar o R como um &#8220;motor&#8221; independente, sem a necessidade do usuário possuí-lo instalado no sistema.</p>



<p>Obs: a versão 4.0.0 do R apresentou alguns problemas no Windows. Caso ainda não esteja disponível a versão 4.0.2 do R Portable, baixe a versão anterior (<a href="https://sourceforge.net/projects/rportable/files/R-Portable/3.6.3/" target="_blank" rel="noreferrer noopener">3.6.3</a>).</p>



<p><strong>1.3.</strong>&nbsp;Ir em&nbsp;<em>R-Portable/App/R-Portable/etc/Rprofile.site&nbsp;</em>e, ao final do arquivo, colar o código:</p>



<pre class="wp-block-preformatted">.First = function(){
&nbsp; &nbsp; .libPaths(.Library)
}
</pre>



<p>Isso forçará o R Portable a usar apenas sua biblioteca local para instalar/carregar pacotes.</p>



<p><strong>1.4.&nbsp;</strong>Inicie o R Portable e instale os pacotes utilizados no aplicativo Shiny desenvolvido. No mínimo deve ser instalado o pacote&nbsp;<em>shiny.</em></p>



<figure class="wp-block-image"><img src="https://media-exp1.licdn.com/dms/image/C4D12AQEnVceHvDGUJA/article-inline_image-shrink_1000_1488/0?e=1606953600&amp;v=beta&amp;t=vDUvlWSB-k8Dx3bjn_LC270lljy9qI2hBjmL5LFwdyM" alt="Não foi fornecido texto alternativo para esta imagem"/></figure>



<p><strong>1.5.&nbsp;</strong>Crie a pasta&nbsp;<em>executavel/shiny/</em>&nbsp;com o aplicativo Shiny desenvolvido.</p>



<figure class="wp-block-image"><img src="https://media-exp1.licdn.com/dms/image/C5612AQF0Nz4cCN88Sw/article-inline_image-shrink_1000_1488/0?e=1606953600&amp;v=beta&amp;t=rSfcbIpXp98Suxoskl0zh9IqD5DncmEJtmX_yITRDro" alt="Não foi fornecido texto alternativo para esta imagem"/></figure>



<p>A proposta não é ensinar a funcionalidade Shiny, mas sim explicar como transformá-la em um executável. Portanto, em app.R, criei um exemplo simples e sem utilidade. Note que incluí&nbsp;<em>session&nbsp;</em>como um parâmetro na função do servidor, e&nbsp;<strong>utilizei este objeto para encerrar corretamente o aplicativo quando sua tela for fechada</strong>.</p>



<pre class="wp-block-preformatted">library(shiny)


ui &lt;- fluidPage(
&nbsp;&nbsp;
&nbsp; titlePanel("Hello Shiny!"),
&nbsp;&nbsp;
)


server &lt;- function(input, output, session) {
&nbsp;&nbsp;
&nbsp; # FINALIZANDO APLICATIVO
&nbsp; session$onSessionEnded(function() stopApp())
&nbsp;&nbsp;
}


shinyApp(ui = ui, server = server)
</pre>



<p><strong>2 &#8211; Criar scripts de inicialização do aplicativo</strong></p>



<p><strong>2.1.</strong>&nbsp;Criar o script&nbsp;<em>runShinyApp.R</em>&nbsp;na pasta&nbsp;<em>executavel/</em>&nbsp;com o seguinte código:</p>



<pre class="wp-block-preformatted">chrome.sys = 'C:/Program Files (x86)/Google/Chrome/Application/chrome.exe'


if (file.exists(chrome.sys))
&nbsp; options(browser = chrome.sys)
shiny::runApp('./shiny/app.R', launch.browser=T)
</pre>



<p>A ideia é verificar se o usuário possui o Google Chrome instalado: se sim, abrir o aplicativo neste navegador e, se não, abri-lo no seu navegador padrão.</p>



<p><a href="https://www.r-bloggers.com/2014/04/deploying-desktop-apps-with-r/" target="_blank" rel="noreferrer noopener">Lee Pang</a>&nbsp;sugere que se instale uma versão portátil do Google Chrome, assim como o R Portable, para o caso do usuário não ter um navegador instalado. Entendo não ser necessário, por ser um programa mais comum (e também acho mais legal abrir como uma aba adicional no Chrome).</p>



<p><strong>2.2.</strong>&nbsp;Criar o script&nbsp;<em>run.vbs</em>&nbsp;para ser um botão de inicialização do aplicativo. Para tal, abra um bloco de notas e cole o seguinte código:</p>



<pre class="wp-block-preformatted">Rexe&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;= "R-Portable\App\R-Portable\bin\Rscript.exe"
Ropts&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; = "--no-save --no-environ --no-init-file --no-restore --no-Rconsole"
RScriptFile&nbsp; &nbsp; = "runShinyApp.R"
Outfile&nbsp; &nbsp; &nbsp; &nbsp; = "ShinyApp.log"&nbsp;
strCommand&nbsp; &nbsp; &nbsp;= Rexe &amp; " " &amp; Ropts &amp; " " &amp; RScriptFile &amp; " 1&gt; " &amp; Outfile &amp; " 2&gt;&amp;1"

intWindowStyle = 0&nbsp; &nbsp; &nbsp;' Hide the window and activate another window.'
bWaitOnReturn&nbsp; = False ' continue running script after launching R&nbsp; &nbsp;'

' the following is a Sub call, so no parentheses around arguments'
CreateObject("Wscript.Shell").Run strCommand, intWindowStyle, bWaitOnReturn
</pre>



<p>Salve o arquivo com o nome&nbsp;<em>rub.vbs&nbsp;</em>na pasta&nbsp;<em>executavel/&nbsp;</em>para criar um inicializador da aplicação.</p>



<p><strong>2.3.</strong>&nbsp;Se todas as etapas até aqui foram feitas corretamente, ao clicar duas vezes em&nbsp;<em>run.vbs</em>, o aplicativo abrirá em uma aba do navegador do Google Chrome.</p>



<figure class="wp-block-image"><img src="https://media-exp1.licdn.com/dms/image/C4D12AQG_LuleSgP-bg/article-inline_image-shrink_1000_1488/0?e=1606953600&amp;v=beta&amp;t=TB36XBKoIiXTUUp931cA8JF4_NDXGPprIfBSOd4x8Jw" alt="Não foi fornecido texto alternativo para esta imagem"/></figure>



<p>Obs: O arquivo&nbsp;<em>ShinyApp.txt&nbsp;</em>é criado automaticamente para salvar o log de dados.</p>



<p><strong>3 &#8211; Compactar em um executável de instalação</strong></p>



<p>Até o momento conseguimos compartilhar a pasta&nbsp;<em>executavel/&nbsp;</em>e rodar o aplicativo simplesmente clicando duas vezes em&nbsp;<em>run.vbs.</em></p>



<p>Essa seção busca embelezar o processo, criando um executável de instalação e um atalho personalizado para o desktop.</p>



<p><strong>3.1.</strong>&nbsp;Baixe a ferramenta&nbsp;<a href="https://jrsoftware.org/isinfo.php" target="_blank" rel="noreferrer noopener">Inno Setup</a>&nbsp;(não precisa instalar na pasta&nbsp;<em>executavel/</em>).</p>



<p>Obs: Você pode baixar um &#8220;módulo de criptografia&#8221; separado, se quiser utilizar os recursos de criptografia do Inno Setup.</p>



<p><strong>3.2.</strong>&nbsp;Salve uma imagem no formato ICO na pasta&nbsp;<em>executavel/.&nbsp;</em>Utilizarei o&nbsp;<em>ico_hello.ico.</em></p>



<figure class="wp-block-image"><img src="https://media-exp1.licdn.com/dms/image/C4D12AQEcNxHq-NIZAw/article-inline_image-shrink_1000_1488/0?e=1606953600&amp;v=beta&amp;t=cXgh8sk9KRYAAl_oJIoXrmT_SEryvGGF9hvMs0gOut4" alt="Não foi fornecido texto alternativo para esta imagem"/></figure>



<p>Obs: Sites que convertem PNG em ICO são de fácil acesso, costumo utilizar o&nbsp;<a href="https://convertio.co/pt/png-ico/" target="_blank" rel="noreferrer noopener">Convertio</a>.</p>



<p><strong>3.3.&nbsp;</strong>Abra um script no Inno Setup e cole o código abaixo:</p>



<pre class="wp-block-preformatted">#define MyAppName "HELLO"&nbsp; ; NOME DO APLICATIVO
#define MyAppVersion "1.0"&nbsp; ; VERSÃO
#define MyAppPublisher "My Company, Inc."&nbsp; &nbsp;; COMPANHIA
#define MyAppURL "http://www.example.com/"&nbsp; ; SITE


[Setup]
; NOTA: O valor de AppId identifica exclusivamente este aplicativo. Não use o mesmo valor AppId em instaladores para outros aplicativos.
; (Para gerar um novo GUID, clique em Ferramentas | Gerar GUID dentro do IDE.)
AppId={{E8C494FB-1AE3-45C6-8B6F-F00649056FF7}


AppName={#MyAppName}
AppVersion={#MyAppVersion}
;AppVerName={#MyAppName} {#MyAppVersion}
AppPublisher={#MyAppPublisher}
AppPublisherURL={#MyAppURL}
AppSupportURL={#MyAppURL}
AppUpdatesURL={#MyAppURL}
DefaultDirName=C:\{#MyAppName}
DefaultGroupName={#MyAppName}
AllowNoIcons=yes


; Remova o comentário da linha a seguir para executar no modo de instalação não administrativa (instalar apenas para o usuário atual).
;PrivilegesRequired=lowest


; Endereço da pasta que será salvo o instalador
OutputDir=C:\Users\Administrador\Documents\Shiny


; Nome do instalador
OutputBaseFilename=HELLO_INSTALADOR


; Endereço do ICO
SetupIconFile=C:\Users\Administrador\Documents\Shiny\executavel\\ico_hello.ico


Compression=lzma
SolidCompression=yes
PrivilegesRequired=none


; Criptografar Instalador
; Encryption=yes


; Senha, se quiser
Password=12345678&nbsp; &nbsp;&nbsp;


[Languages]
Name: "brazilianportuguese"; MessagesFile: "compiler:Languages\BrazilianPortuguese.isl"


[Files]
; Endereço da pasta que será compactada com \* no final
Source: "C:\Users\Administrador\Documents\Shiny\executavel\*"; DestDir: "{app}"; Flags: ignoreversion recursesubdirs createallsubdirs
;&nbsp; NOTA: Não use "Flags: ignoreversion" em nenhum arquivo de sistema compartilhado


; Criar programa de desinstalação
[Icons]
Name: "{group}\{cm:UninstallProgram,{#MyAppName}}"; Filename: "{uninstallexe}"


; Substituir com o nome do aplicativo, o nome do arquivo VBS e do arquivo ICO
[Icons]
Name: "{commondesktop}\HELLO"; Filename: "{app}\run.vbs"; IconFilename: {app}\ico_hello.ico

</pre>



<p>Segue abaixo como fica a visualização do código acima no Inno Setup. Os comentários (em verde) irão indicar os códigos que deverão se alterados para adaptar a um outro executável de instalação.</p>



<figure class="wp-block-image"><img src="https://media-exp1.licdn.com/dms/image/C4D12AQExOLiKsfiW2Q/article-inline_image-shrink_1000_1488/0?e=1606953600&amp;v=beta&amp;t=hPPXOEKGkT9zjRWxLe9GUqrUbWSoSyKK-jYxmuroOBE" alt="Não foi fornecido texto alternativo para esta imagem"/></figure>



<p>Após ajustar o script, o execute.</p>



<p><strong>3.4.&nbsp;</strong>Será criado um instalador na pasta indicada pelo script. No meu caso o nomeei de HELLO_INSTALADOR.</p>



<figure class="wp-block-image"><img src="https://media-exp1.licdn.com/dms/image/C4D12AQFA91dtmz1KXA/article-inline_image-shrink_1000_1488/0?e=1606953600&amp;v=beta&amp;t=0IglKCT0ZQDzIKhAF7vK3dQRU15Sozuxrcb22XdaFMY" alt="Não foi fornecido texto alternativo para esta imagem"/></figure>



<p>Caso não tenha instalado o aplicativo logo após o Inno Setup criar o executável, clique duas vezes para instalar.</p>



<p>Esse executável de instalação poderá ser compartilhado com os usuários.</p>



<p><strong>3.5.&nbsp;</strong>Após a instalação, será criado um atalho na sua tela principal que abrirá o aplicativo Shiny automáticamente:</p>



<figure class="wp-block-image"><img src="https://media-exp1.licdn.com/dms/image/C4D12AQFRZTLueKLJEw/article-inline_image-shrink_1000_1488/0?e=1606953600&amp;v=beta&amp;t=DHLbRZr0fsm9Bq0I1se7kl56nrQEEZLrqsa82VW_KZw" alt="Não foi fornecido texto alternativo para esta imagem"/></figure>



<p>Pronto. Temos um aplicativo disponibilizado a partir de um executável de instalação.</p>



<p><strong>Considerações finais</strong></p>



<p>De nada adianta criar um executável, se o aplicativo Shiny não tiver utilidade. Acho que ninguém irá apresentar para o chefe um &#8220;Hello Shiny!&#8221;.</p>



<p>Para uma maior aprendizado dessa ferramenta, recomendo a consulta dos seguintes links:</p>



<ul><li><a href="https://shiny.rstudio.com/tutorial/" target="_blank" rel="noreferrer noopener">https://shiny.rstudio.com/tutorial/</a></li><li><a href="https://rstudio.github.io/shinydashboard/" target="_blank" rel="noreferrer noopener">https://rstudio.github.io/shinydashboard</a></li><li><a href="https://shiny.rstudio.com/gallery/" target="_blank" rel="noreferrer noopener">https://shiny.rstudio.com/gallery</a></li><li><a href="https://rstudio.github.io/DT/shiny.html" target="_blank" rel="noreferrer noopener">https://rstudio.github.io/DT/shiny.html</a></li><li><a href="https://shiny.rstudio.com/articles/css.html" target="_blank" rel="noreferrer noopener">https://shiny.rstudio.com/articles/css.html</a></li></ul>



<p><a href="#R hashtag#Shiny hashtag#RShiny hashtag#AppShiny hashtag#Desktop hashtag#Innosetup">#R </a><a href="https://www.linkedin.com/feed/hashtag/?keywords=r">#R</a> <a href="https://www.linkedin.com/feed/hashtag/?keywords=shiny">hashtag#Shiny</a> <a href="https://www.linkedin.com/feed/hashtag/?keywords=rshiny">hashtag#RShiny</a> <a href="https://www.linkedin.com/feed/hashtag/?keywords=appshiny">hashtag#AppShiny</a> <a href="https://www.linkedin.com/feed/hashtag/?keywords=desktop">hashtag#Desktop</a> <a href="https://www.linkedin.com/feed/hashtag/?keywords=innosetup">hashtag#Innosetup</a></p>
<p>O post <a rel="nofollow" href="http://estatidados.com.br/criando-um-aplicativo-desktop-em-shiny/">Criando um aplicativo desktop em Shiny</a> apareceu primeiro em <a rel="nofollow" href="http://estatidados.com.br">Estatidados</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>http://estatidados.com.br/criando-um-aplicativo-desktop-em-shiny/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>
