Alterar o caminho da biblioteca padrão R usando .libPaths no Rprofile.site falha ao funcionar

206

Estou executando o R no Windows, não como administrador. Quando instalo um pacote, o seguinte comando não funciona:

> install.packages("zoo")
Installing package(s) into ‘C:/Program Files/R/R-2.15.2/library’
(as ‘lib’ is unspecified)
Warning in install.packages :
  'lib = "C:/Program Files/R/R-2.15.2/library"' is not writable

Para instalar um pacote, preciso especificar um local da biblioteca:

install.packages("zoo", lib="C:/software/Rpackages")

Para carregar um pacote, também preciso especificar o local da biblioteca:

library("zoo", lib.loc="C:/software/Rpackages")

Tudo isso está bem, mas eu queria ver se eu poderia adicionar C:/software/Rpackagesao caminho da biblioteca de alguma forma e, portanto, não precisar digitá-lo toda vez.

Ao pesquisar online, descobri que uma maneira de fazer isso é editar o Rprofile.sitearquivo e adicionar a linha

.libPaths("C:/software/Rpackages")

No entanto, depois de fazer isso e iniciar o RStudio, essa é a saída que recebo

> .libPaths()
[1] "C:/Program Files/R/R-2.15.2/library" "C:/Program Files/RStudio/R/library" 

O .libPathscomando que eu adicionei ao Rprofile.sitenão parece ter tido nenhum efeito! Por que esse é o caso? Ou, mais importante, como posso resolver o problema para instalar e carregar pacotes sem digitar no local da biblioteca?

Nota: se eu iniciar o RStudio, o .libPaths()comando parecerá funcionar como deveria

.libPaths("C:/software/Rpackages")
> .libPaths()
[1] "C:/software/Rpackages"               "C:/Program Files/R/R-2.15.2/library"

Isso não é estranho?

Eu gosto de codificar
fonte
Você pode expandir um pouco exatamente como exatamente install.packages("zoo")não funciona? Mensagem de erro, etc.?
joran
1
@joran eu adicionei a mensagem de erro quando tento install.packages("zoo")--- mas que não é a minha verdadeira pergunta, que é sobre o porquê .libPaths()de Rprofile.sitenão funciona.
Eu gosto de codificar
1
Você tem o mesmo problema se usar o RGui em vez do R Studio?
Dason
6
Por que os caminhos da biblioteca de R são padronizados para pastas que precisam de permissões de administrador ?! Certamente o diretório home do usuário seria mais sensato
geotheory
superuser.com/questions/749283/… Edit ~ / .Renviron R_LIBS_USER = / some / path
bowen.li

Respostas:

171

Geralmente, tento manter todos os meus pacotes em uma biblioteca, mas se você deseja adicionar uma biblioteca, por que não anexar a nova biblioteca (que já deve existir no seu sistema de arquivos) ao caminho da biblioteca existente?

.libPaths( c( .libPaths(), "~/userLibrary") )

Ou (e isso tornará a userLibrary o primeiro lugar para colocar novos pacotes):

.libPaths( c( "~/userLibrary" , .libPaths() ) )

Então eu recebo (pelo menos quando escrevi isso originalmente):

> .libPaths()
[1] "/Library/Frameworks/R.framework/Versions/2.15/Resources/library"
[2] "/Users/user_name/userLibrary"  

A .libPathsfunção é um pouco diferente da maioria das outras funções não gráficas. Funciona via efeito colateral. As funções Sys.getenve Sys.setenvesse relatório e alteram as variáveis ​​de ambiente R foram divididas, mas .libPathspodem relatar ou alterar seu destino.

As informações sobre o processo de inicialização do R podem ser lidas na ?Startuppágina de ajuda e há material do RStudio em: https://support.rstudio.com/hc/en-us/articles/200549016-Customizing-RStudio

No seu caso, parece que o RStudio não está respeitando as configurações do Rprofile.site ou talvez as esteja substituindo lendo uma configuração .Rprofile de um dos padrões do RStudio. Também deve ser mencionado que o resultado desta operação também anexa o conteúdo das chamadas .Librarye .Library.site, razão pela qual um R hospedado no RStudio- (ou qualquer outro IDE ou rede instalado-) hospedado R pode exibir um comportamento diferente.

Como Sys.getenv()retorna o ambiente atual do sistema para o processo R, você pode ver a biblioteca e outros caminhos com:

Sys.getenv()[ grep("LIB|PATH", names(Sys.getenv())) ]

Os dois que são importantes para armazenar e acessar pacotes são (agora diferentes em uma caixa Linux):

R_LIBS_SITE                          /usr/local/lib/R/site-library:/usr/lib/R/site-library:/usr/lib/R/library
R_LIBS_USER                          /home/david/R/x86_64-pc-linux-gnu-library/3.5.1/
IRTFM
fonte
12
Eu precisava para reverter o c()vector para garantir novas bibliotecas ir para a pasta personalizada
geotheory
Excelente ponto. De fato, a .libPathsfunção-tem o mesmo efeito por padrão. Há também uma diferença entre os sistemas operacionais na maneira como as barras finais são tratadas. (Não está bem no Windows). Existem outras opções. Veja?.libPaths
IRTFM
5
O novo caminho tem de existir no sistema de arquivos, na verdade, caso contrário ele não será adicionado ao caminho da biblioteca
jarandaf
Outro bom ponto. Embora o nome da função sugira o contrário, você pode primeiro verificar file.existse prosseguir apenas se o caminho não estiver faltando.
IRTFM
3
Eu fiz isso e funciona, mas parece que tenho que mudar o caminho toda vez que inicio a R. É o mesmo para os outros?
Cyrusjan # 20/16
215

A solução adequada é definir a variável de ambiente R_LIBS_USERcom o valor do caminho do arquivo para a pasta da biblioteca desejada, em vez de fazer com que o RStudio reconheça um arquivo Rprofile.site.

Para definir a variável de ambiente R_LIBS_USERno Windows, vá para o Painel de controle (Propriedades do sistema -> Propriedades avançadas do sistema -> Variáveis ​​de ambiente -> Variáveis ​​do usuário) para um valor desejado (o caminho para a pasta da sua biblioteca), por exemplo

Variable name: R_LIBS_USER 
Variable value: C:/software/Rpackages  

A configuração de R_LIBS_USER garantirá que a biblioteca seja exibida primeiro em .libPaths (), independentemente de iniciar o RStudio diretamente ou clicando com o botão direito do mouse em um arquivo e em "Abrir com" para iniciar o RStudio.

A solução Rprofile pode funcionar se o RStudio sempre for iniciado clicando no atalho do RStudio. Nesse caso, definir o diretório de trabalho padrão como o diretório que hospeda seu Rprofile será suficiente. A solução Rprofile não funciona ao clicar em um arquivo para iniciar o RStudio, porque isso altera o diretório ativo do diretório ativo padrão.

Paweł Rumian
fonte
2
Solução adequada acordada!
Felixmc 26/06
14
Definitivamente a solução adequada. O único problema é que se o usuário não for um administrador (provavelmente o caso, se você está enfrentando esse problema), precisará alterar as variáveis ​​de ambiente através do Painel de controle-> Contas do usuário-> Contas do usuário-> Alterar meu ambiente variáveis.
David Moye
1
Você conhece o equivalente na linha de comando do Linux?
Diego-MX
5
Claro, basta configurá-las como variáveis ​​de shell (no bash você pode editar .bash_profilee / ou .bashrc). Veja aqui: unix.stackexchange.com/questions/117467/... Para definir estes para a sessão atual só digitar consolaexport R_LIBS_USER='directory_of_your_choice'
Paweł Rumian
2
em vez de definir a variável pelo painel de controle, modifiquei o valor padrão de R_LIB_USER no arquivo Rprofile. Aqui a solução: eu vim com uma abordagem semelhante, a solução é apresentada em como uma solução para esta questão stackoverflow.com/questions/31707941/...
Marco
24

Consegui resolver o problema colocando o código no .Rprofilearquivo no diretório de trabalho padrão.

Primeiro, encontrei o local do diretório de trabalho padrão

> getwd()
[1] "C:/Users/me/Documents"

Então eu usei um editor de texto para escrever um .Rprofilearquivo simples com a seguinte linha

.libPaths("C:/software/Rpackages")

Finalmente, quando inicio Re executo .libPaths(), obtenho a saída desejada:

> .libPaths()
[1] "C:/software/Rpackages"               "C:/Program Files/R/R-2.15.2/library"
[3] "C:/Program Files/RStudio/R/library"
Eu gosto de codificar
fonte
Isso não funciona para mim (nem a solução da BondedDust). Criei um arquivo txt e o salvei como .Rprofile na pasta de getwd ().
John
2
@ John Eu acredito que estamos dizendo a mesma coisa.
Eu gosto de codificar
3
R lê .Rprofile do diretório HOME e não do diretório ATUAL .
Crt
Eu vim com uma abordagem semelhante, a solução é apresentada como uma solução para esta questão stackoverflow.com/questions/31707941/…
Marco Marco
Para encontrar o diretório principal, emita o comando r Sys.getenv("HOME")no console r. Não tenho certeza se você obtém a saída desejada. Acho que o resultado desejado é o que 42 mostrou em sua resposta stackoverflow.com/a/15170774/754550 . Ele usa .libPaths de uma maneira ligeiramente diferente.
miracle173
11

Encontrei o que acho uma solução aqui (obrigado Carl Schwarz, da SFU) por adicionar uma biblioteca pessoal permanentemente (você não precisa defini-la a cada sessão) reconhecida se está usando R ou Rstudio, e o Rstudio a trata como a padrão na minha máquina Mac. Eu não tinha visto isso explicitamente explicado no SO, então resumi as etapas que eles forneceram, para Windows e depois para Mac.

Para um sistema operacional Windows 7:

  1. Crie um diretório na unidade onde você deseja ter sua biblioteca pessoal, por exemplo, C: \ User \ Rlibs (ou outro para o qual você tenha permissão)

  2. Pesquise / vá para "Editar variável de ambiente para sua conta" na barra de pesquisa do Windows para editar as configurações do painel de controle

  3. Clique em "Novo ..." no meio da janela "Variáveis ​​ambientais"

  4. Na janela "Nova variável do usuário", digite R_LIBS para o "Nome da variável" e o caminho para o diretório da biblioteca pessoal que você criou, por exemplo, C: \ User \ Rlibs

  5. Clique em OK e você verá o par Variável / Valor na janela Variáveis ​​de usuário

  6. Clique em OK novamente

Agora, ao iniciar o R ​​(ou Rstudio) e digitar o comando, .libPaths()você deverá ver a biblioteca pessoal criada e a biblioteca do sistema R.

Para Mac:

  1. No diretório "Inicial" ou "nome de usuário", crie uma pasta chamada Rlibs

  2. Inicie o aplicativo Terminal

  3. Tipo: echo "R_LIBS=~/Rlibs"> .Renvrionverifique se o caso corresponde.

  4. Digite ls -apara ver a lista completa de arquivos no diretório, que agora deve incluir .Renvrion

  5. Verifique se o arquivo .Renviron foi definido corretamente:more .Renviron

Inicie o R / Rstudio e digite .libPaths()e você deverá ver o novo caminho para sua biblioteca pessoal.

Whalen
fonte
8

Se você não possui direitos de administrador, também pode ser útil abrir o Rprofile.sitearquivo localizado em \ R-3.1.0 \ etc e adicionar:

.First <- function(){
  .libPaths("your path here")
}

Avalia o .libPath()comando diretamente no início

schlusie
fonte
4

Eu tive problemas para entender isso. O gorkypl forneceu a solução correta acima quando eu reinstalei meu SO e Rstudio, mas desta vez, definir a variável de ambiente não foi resolvida.

Desinstalou o R e o Rstudio, criando os diretórios C: \ R e C: \ Rstudio e reinstalou os dois.

Defina a variável de usuário R_LIBS_USER para o seu diretório preferido (conforme resposta do gorkypl) e reinicie a máquina para que a variável de usuário seja carregada. Abra o Rstudio, os erros devem ter desaparecido.

Você também pode usar Sys.setenv()para modificar R_LIBS_USER para o caminho da sua biblioteca alternativa, o que é mais fácil e não precisa reiniciar o computador.

Para ver o que R_LIBS_USER está definido como: ?Sys.getenv()

A leitura help(Startup)é útil.

felixmc
fonte
2

Se sua biblioteca de pacotes padrão foi alterada após a instalação de uma nova versão do R ou por qualquer outro meio, você pode anexar as duas bibliotecas para usar todos os pacotes com a ajuda dos comandos abaixo. Obtenha o caminho da biblioteca existente:

.libPaths()

Agora, defina o caminho existente e o antigo:

.libPaths(c(.libPaths(), "~/yourOldPath"))

Espero que ajude.

Shivong Birla
fonte
2

basta alterar a pasta padrão para suas bibliotecas R em um diretório sem direitos de administrador, por exemplo

.libPaths("C:/R/libs")
Sébastien Wieckowski
fonte
1

Eu li o leia-me. Na medida em que eles mencionaram, use .libPaths () na linha de comando para verificar quais caminhos existem. Eu tinha 2 caminhos de biblioteca anteriormente. Quando usei o comando .libpath ("C: / Arquivos de Programas / R / R-3.2.4revised / library") onde eu queria, ele mudou o caminho da biblioteca. Quando digitei .libPaths () na linha de comando novamente, ele me mostrou o caminho correto. Espero que isto ajude

Supriya Deverkonda
fonte
1

No Ubuntu, a maneira recomendada de alterar o caminho da biblioteca padrão para um usuário é definir a R_LIBS_USERvariável no ~/.Renvironarquivo.

touch ~/.Renviron
echo "R_LIBS_USER=/custom/path/in/absolute/form" >> ~/.Renviron
tzabal
fonte
0
getwd()
# [1] "C:/Users/..../software/My R studio"

copie o link acima com vírgula dupla invertida

.libPaths(new="C:/Users/..../software/My R studio")

Seu caminho padrão será alterado para a instalação de pakages

Sayed Mohammed Zeeshan
fonte
0

Se você deseja alterar permanentemente o caminho da sua biblioteca (sem chamar .libPath () sempre que entrar no R, isso funciona para mim:

  1. crie .Rprofile no seu diretório pessoal. (~ / .Profile)

  2. digite o .libPaths(c( .libPaths(), "your new path" )) arquivo .Rprofile, salve.

  3. abra R (qualquer diretório) e verifique, apenas digite .libPaths(), você pode encontrar o seu caminho da libaray atualizado!

Pengyao
fonte
-1

Eu estava investigando isso porque o R estava com problemas para instalar no local padrão e estava apenas colocando os pacotes na pasta temp. Acabou sendo a atualização mais recente do Mcaffee Endpoint Security que aparentemente apresenta problemas com o R. Você pode desativar a proteção contra ameaças enquanto instala os pacotes e ele funcionará corretamente.

Kristen Bystrom
fonte