首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >R包中的rJava类路径.在某些系统上工作..。不是其他人

R包中的rJava类路径.在某些系统上工作..。不是其他人
EN

Stack Overflow用户
提问于 2011-02-23 20:59:56
回答 1查看 4.1K关注 0票数 5

我为R构建了一个包,它将R封装在一些Java类中。在我的开发膝上型电脑(Ubuntu)上,这个包正确地加载并且工作得很好。在另外两台机器(一台Ubuntu,一台Debian)上,我尝试使用这个包,而且.jpackage()调用没有设置类路径。

这三台机器都运行着R2.12.1和rJava 8.8-8,我认为这是最新的。

整个包是谷歌代码,但是这里是zzz.R文件的内容,它可以在一台机器上设置类路径,而不是其他机器:

代码语言:javascript
运行
复制
##' @import rJava
.onLoad <- function(lib, pkg) {
    pathToSdk <- paste(system.file(package = "GSRadR") , "/gsrad_sample/lib/", sep="")

    jarPaths <- c(paste(pathToSdk, "clima_core-1.0.0.jar", sep=""),
                  paste(pathToSdk, "clima_GSRAD-1.0.0.jar", sep=""),
                  paste(pathToSdk, "colt-1.0.jar", sep=""),
                  paste(pathToSdk, "commons-lang-2.0.jar", sep=""),
                  paste(pathToSdk, "junit-3.8.1.jar", sep=""),
                  paste(pathToSdk, "log4j-1.2.8.jar", sep=""),
                  paste(pathToSdk, "xqore.jar", sep="")
                  )    
    .jpackage(pkg, morePaths=jarPaths)
    attach( javaImport( c("java.lang", "java.io")))
    packageStartupMessage( paste( "GSRadR loaded. The classpath is: ", paste(.jclassPath(), collapse=" " ) ) )        
}

在我的笔记本电脑上,它返回以下内容:

代码语言:javascript
运行
复制
> require(GSRadR)
Loading required package: GSRadR
Loading required package: rJava
GSRadR loaded. The classpath is:  /home/jal/R/library/rJava/java /home/jal/R/library/GSRadR/gsrad_sample/lib/clima_core-1.0.0.jar /home/jal/R/library/GSRadR/gsrad_sample/lib/clima_GSRAD-1.0.0.jar /home/jal/R/library/GSRadR/gsrad_sample/lib/colt-1.0.jar /home/jal/R/library/GSRadR/gsrad_sample/lib/commons-lang-2.0.jar /home/jal/R/library/GSRadR/gsrad_sample/lib/junit-3.8.1.jar /home/jal/R/library/GSRadR/gsrad_sample/lib/log4j-1.2.8.jar /home/jal/R/library/GSRadR/gsrad_sample/lib/xqore.jar

但在我的其他机器上,它只返回:

代码语言:javascript
运行
复制
> require(GSRadR)
Loading required package: GSRadR
Loading required package: rJava
GSRadR loaded. The classpath is:  /usr/lib/R/site-library/rJava/java

有什么提示可以使.jpackage()调用在不同的机器上以不同的方式工作呢?我以前使用rJava构建过包,并且对.onLoad()函数使用了相同的模板,没有任何问题。

编辑

因此,在其中一台机器上,这是不工作的,我试图简单地添加一个路径到类路径的“非包”方式。但失败了:

代码语言:javascript
运行
复制
> .jaddClassPath("/home/jal/R/x86_64-pc-linux-gnu-library/2.12/GSRadR/gsrad_sample/lib/clima_core-1.0.0.jar")
> .jclassPath()
[1] "/usr/lib/R/site-library/rJava/java"

嗯..。所以我不能在类路径中添加任何内容。但是为什么呢?

编辑II

当我将自定义库加载到一台无法工作的机器上时,我使用的是一个临时库位置,如下所示:

代码语言:javascript
运行
复制
install.packages("/tmp/GSRadR_0.01.tar.gz", lib=/my/path)

然后像这样加载库:

代码语言:javascript
运行
复制
require(GARadR, lib=/my/path)

通过反复试验,我发现,如果删除lib=位,它就会正常工作。那么,为什么将使用rJava的R包加载到自定义库位置会使.jaddClassPath()函数无法工作呢?

我也许能解决这个问题,但我很想知道是什么导致了这种奇怪的行为(至少对我来说是这样)。

EN

回答 1

Stack Overflow用户

发布于 2011-07-29 02:36:34

我怀疑第一个编辑中的目录或文件不存在:/home/jal/R/x86_64-pc-linux-gnu-library/2.12/GSRadR/gsrad_sample/lib/clima_core-1.0.0.jar。(另外,您确定要添加特定的文件或目录吗?)

试试file.info("/home/jal/R/x86_64-pc-linux-gnu-library/2.12/GSRadR/gsrad_sample/lib/clima_core-1.0.0.jar")

在我的例子中,我尝试了.jaddClassPath("/willy/wonka"),但它没有起作用。但是当我尝试.jaddClassPath("/home/voldemort")的时候,它成功了。(让Java成为您的魂器。)

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5097041

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档