2017-05-06 76 views
0

兩次現在我遇到了base函數被其他包掩蓋的問題。有沒有辦法將其他軟件包加載到庫中,但不允許它們屏蔽base軟件包?保持基礎包不被掩蓋

回答

3

一般來說,使用軟件包總是可以使用,而不必將其名稱空間附加到搜索路徑。附加而不是加載是導致具有相同名稱的功能相互衝突的原因。也就是說,不是

library(pkg) 
pkgfunc(a, b, ...) 

loadNamespace("pkg") 
pkg::pkgfunc(a, b, ...) 

其中::操作手段來調用從給定的命名空間中導出的函數。你可能會遇到問題,但他們應該很少。

對於來自其他語言的程序員,這比每次想要使用包時調用library()的R中的慣例更爲熟悉。 (我確實覺得有點奇怪,在R製作包名稱空間強制處理這個問題之後的幾年中,人們仍然會將每個包加載到全局環境中。)

如果你不想這樣做,那麼你可以用base::代替base功能的前綴。這是對基本包中的函數的明確引用,因此將忽略具有相同名稱的其他函數。

base::sum(1:10) 
base::list(a=1, b=2, c=3) 
+0

謝謝你這樣的一個綜合性答案。爲什麼不在每次加載包時都使用前綴而不是從名稱空間導出(因爲似乎您必須先使用前綴)? – Bonono