在加载.Rprofile时安装R包失败

4
当我尝试在R中安装软件包时,如果我的`.Rprofile`被加载,几乎总是安装失败。但是,如果使用`--vanilla`标志加载R,则可以无问题地安装软件包。以下是具有该问题的R会话的输出。我认为这个问题与我的`.Rprofile`中的`First()`函数或历史文件有关。您可以在此处查看我的Rprofile文件。
$ install.packages("SuppDists")
Installing package into ‘/home/lmullen/R/x86_64-pc-linux-gnu-library/3.0’
(as ‘lib’ is unspecified)
trying URL 'http://cran.cnr.Berkeley.edu/src/contrib/SuppDists_1.1-9.tar.gz'
Content type 'application/x-gzip' length 140784 bytes (137 Kb)
opened URL
==================================================
downloaded 137 Kb

Loading required package: stats
Loading required package: sp
rgeos version: 0.2-19, (SVN revision 394)
 GEOS runtime version: 3.3.3-CAPI-1.7.4 
 Polygon checking: TRUE 

rgdal: version: 0.8-10, (SVN revision 478)
Geospatial Data Abstraction Library extensions to R successfully loaded
Loaded GDAL runtime: GDAL 1.9.0, released 2011/12/29
Path to GDAL shared files: /usr/share/gdal/1.9
Loaded PROJ.4 runtime: Rel. 4.7.1, 23 September 2009, [PJ_VERSION: 470]
Path to PROJ.4 shared files: (autodetected)
Error in .External2(C_loadhistory, file) : no history mechanism available
Calls: .First -> <Anonymous>
Execution halted

The downloaded source packages are in
    ‘/tmp/RtmpX42EEZ/downloaded_packages’
Warning message:
In install.packages("SuppDists") :
  installation of package ‘SuppDists’ had non-zero exit status

有人知道问题是什么吗?

你尝试过移除 .First 函数来看是否有帮助吗? - Dason
1
我也只建议在交互式会话中加载任何软件包 - 一般情况下,我建议不要加载任何软件包,因为这会导致代码无法重现。 - hadley
@Dason:我尝试删除.First函数,历史记录的错误消息消失了,但是软件包仍然无法安装。 - Lincoln Mullen
@hadley:感谢您的建议。我完全同意关于加载包的观点。我总是通过带有--vanilla标志的非交互式会话运行代码。但我采纳了您的建议,并将所有包加载移动到检查会话是否交互的函数中。 - Lincoln Mullen
3个回答

1

Henrik在R-devel邮件列表上给了我答案:

使用

if (interactive()) utils::loadhistory(file = "~/.Rhistory")

应该解决你的问题。原因是install.packages()会启动一个非交互式的子进程来安装软件包。当该进程加载您的启动文件时,它会失败,因为该函数只能在交互模式下使用。


这里是指向Henrik在R-devel邮件列表上的回答的链接:http://r.789695.n4.nabble.com/Trouble-installing-packages-when-history-mechanism-is-modified-by-user-profile-td4729360.html - makeyourownmaker

0

我找出了在我的.Rprofile文件中引起问题的行,但我不知道为什么它们会引起问题。这些行是.First.Last函数:

.First <- function() {
  utils:::loadhistory(file = "~/.Rhistory")
  cat("\nSuccessfully loaded .Rprofile at", date(), "\n\n")
}

.Last <- function() {
  utils:::savehistory(file = "~/.Rhistory")
}

注释掉关于保存和加载历史记录的行,让我成功安装了软件包。

仍然不知道问题的原因吗? - Hugo Raguet
明白了,看到我的答案。 - Hugo Raguet

0

在Ubuntu中:

我从R之外安装了它,多亏了@hugo-raguet的帮助,它运行得很好:

sudo apt-get -y install build-essential
sudo apt-get -y install r-cran-igraph

在 R 中后续无需安装 igraph,我相信。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接