Henrik Bengtsson
2010-Jan-14 20:01 UTC
[Rd] Wishlist: system.file(... package) throw an error if package not installed/path not found
Currently, system.file() on a non-existing package returns an empty string: path <- system.file(package="foo"); print(path); [1] "" The same goes for non-existing paths in existing package directories: path <- system.file("foo", package="base"); print(path); [1] "" Is there a rationale for this, or is it just for historical reasons? Is the empty string "" used in R to represent a "missing" file? (e.g. file.exists("") == FALSE). I would like to suggest that an error is thrown instead, so that it is caught as soon as possible and not down stream. /Henrik
Simon Urbanek
2010-Jan-14 20:33 UTC
[Rd] Wishlist: system.file(... package) throw an error if package not installed/path not found
On Jan 14, 2010, at 15:01 , Henrik Bengtsson wrote:> Currently, system.file() on a non-existing package returns an empty > string: > > path <- system.file(package="foo"); > print(path); > [1] "" > > The same goes for non-existing paths in existing package directories: > > path <- system.file("foo", package="base"); > print(path); > [1] "" > > Is there a rationale for this, or is it just for historical reasons? > Is the empty string "" used in R to represent a "missing" file? (e.g. > file.exists("") == FALSE). > > I would like to suggest that an error is thrown instead, so that it is > caught as soon as possible and not down stream. >I cannot answer for the original author, but throwing an error is generally a very bad idea since it defeats the vectorization. It is much easier to simply use if(nzchar(system.file(...))) if you want to throw an error in a scalar context than to lose all results because of one vector entry. And, yes, file.exists("") will indeed return FALSE (although it is entirely unrelated). Cheers, Simon