2017-08-08 96 views
0

我正在爲R版本3.4.1和Java版本1.8.0_131 我試圖運行我創建了一個函數R工作室,我得到這些錯誤:[R方式的Java IO選中IO異常錯誤

我得到這個錯誤,當我運行特定功能

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' 

我想知道如果任何人可以有一個想法,我得到這個錯誤是什麼導致這些錯誤,在我發佈功能之前。這很長。它本質上是打開多個文件並將其作爲表格讀取。每條路徑都是正確的,它可以單獨工作。

+2

「*在我發佈函數之前*」 - 總是包含相關信息。如果需要,將其格式化爲更具吸引力(包括頂部的TL; DR部分)。 –

回答

0

看起來您正在嘗試在腳本的某個地方使用.when,但是.when沒有這種方法。

問題可能在於您的某個庫(R?)比您使用的文檔版本舊,或者撥打.when的電話首先不存在。

解決此問題的最簡單方法是搜索並找出.when在您的代碼中被調用的位置,然後檢查是否有其他方法可用,或者您只需要更新到更新的庫。

在打開每個文件之間以及在將它們讀入表格之間添加一些調試代碼以打印到控制檯,這樣您至少可以看到代碼在失敗之前獲得的距離。

有關錯誤所在稱爲參考,你可以去看看源rJava這裏: https://github.com/cran/rJava/blob/master/R/reflection.R

特別注意在最後else塊你的錯誤,當rJave試圖尋找一個功能,但找不到它:

### 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)) 
    } 
}