【问题标题】:R java io unchecked io exception errorR java io未经检查的io异常错误
【发布时间】:2018-01-15 10:30:43
【问题描述】:

我正在使用 R 版本 3.4.1 和 java 版本 1.8.0_131 运行 R Studio 我正在尝试运行我创建的函数,但出现以下错误:

运行特定功能时出现此错误

java.io.UncheckedIOException: java.nio.charset.MalformedInputException: Input length = 1

运行整个脚本时出现此错误

 Error in ._jobjRef_dollar(x[["jobj"]], name) : 
      no field, method or inner class called '.when'

在我发布函数之前,我想知道是否有人知道导致这些错误的原因。它很长。它本质上是打开多个文件并将它们作为表格读取。每条路径都是正确的,并且可以单独运行。

【问题讨论】:

  • "在我发布函数之前" - 始终包含相关信息。如果需要,将其格式化为更具吸引力(包括顶部的 TL;DR 部分)。

标签: java r exception io rjava


【解决方案1】:

您似乎正在尝试在脚本中的某处使用.when,但.when 没有这种方法。

问题可能是您的某个库 (R?) 的版本比您使用的文档的版本旧,或者 .when 调用从一开始就不存在。

解决此问题的最简单方法是搜索并找出在您的代码中调用 .when 的位置,然后检查是否有其他方法可以代替,或者您是否只需要更新到较新的库.

在打开每个文件和将它们读取到表格之间添加一些调试代码以打印到控制台,这样您至少可以看到代码在失败之前走了多远。

有关错误调用位置的参考,您可以在此处查看rJava 的源代码: https://github.com/cran/rJava/blob/master/R/reflection.R

当 rJave 尝试查找函数但找不到它时,请特别注意最后一个 else 块中的错误:

### syntactic sugar to allow object$field and object$methods(...)
### first attempts to find a field of that name and then a method
._jobjRef_dollar <- function(x, name) {
    if (hasField(x, name) ){
        .jfield(x, , name)
    } else if( hasJavaMethod( x, name ) ) {
        function(...) .jrcall(x, name, ...)
    } else if( hasClass(x, name) ) {
        cl <- .jcall( x, "Ljava/lang/Class;", "getClass" )
        inner.cl <- .jcall( "RJavaTools", "Ljava/lang/Class;", "getClass", cl, name, FALSE ) 
        new("jclassName", name=.jcall(inner.cl, "S", "getName"), jobj=inner.cl)
    } else if( is.character(name) && length(name) == 1L && name == "length" && isJavaArray(x) ){
        length( x )
    } else {
        stop( sprintf( "no field, method or inner class called '%s' ", name ) ) 
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-11-09
    • 2013-05-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-31
    • 1970-01-01
    相关资源
    最近更新 更多