TERR에서 apply()를 실행할 때 "아래 첨자가 범위를 벗어났습니다"가 발생하지만 일반 R에서는 작동합니다.

StackOverflow https://stackoverflow.com//questions/24038497

  •  21-12-2019
  •  | 
  •  

문제

Spotfire Professional에서 다음 코드 조각을 "R 스크립트 - Tibco Enterprise Runtime for R"로 실행하려고 하면:

mydata_broken <- structure(
  list(
    Var1 = list(3.99083333270391, 3.99083333270391, 3.99083333270391, 3.99083333270391), 
    Var2 = list(3.99083333270391, 3.99083333270391, 3.99083333270391, 3.99083333270391)), 
  row.names = c("1", "2", "3", "4"), 
  class = "data.frame", 
  out.attrs = list(dim = c(2L, 2L), 
                   dimnames = list(
                     Var1 = c("Var1=3.99083333270391", "Var1=3.99083333270391"), 
                     Var2 = c("Var2=3.99083333270391", "Var2=3.99083333270391")
                     )
                   )
  )

mydata_ok <- structure(
  list(
    Var1 = list(3.99083333270391), 
    Var2 = list(3.99083333270391)), 
  row.names = "1", 
  class = "data.frame", 
  out.attrs = list(dim = c(1L, 1L), 
                   dimnames = list(
                     Var1 = "Var1=3.99083333270391", 
                     Var2 = "Var2=3.99083333270391")
                   )
  )

out <- apply(mydata_broken, 1, function(y) mean(as.numeric(y)))

다음과 같은 오류 메시지가 나타납니다.

R용 TIBCO Enterprise Runtime이 오류를 반환했습니다.'expand.names(x) 오류:아래 첨자가 범위를 벗어났습니다.'Spotfire.Dxp.Data.DataFunctions.Executors.LocalFunctionClient.OnExecuting(FunctionClient funcClient)

(나머지 스택 추적 생략)

그러나 동일한 코드는 일반 R에서도 완벽하게 작동합니다.내가 교체하면 mydata_broken ~와 함께 mydata_ok 통화 중 apply(), 모든 것이 예상대로 작동합니다(TERR 및 일반 R 모두에서).

지금까지 시도한 것:

버전 및 구성 정보

  • Spotfire 5.5.0, 빌드 버전 5.5.0.31, 빌드 날짜:2013년 5월 22일
  • R 버전 3.0.2, 64비트(2013-09-25)
  • 윈도우 7, 64비트

그래서 내 질문은 다음과 같습니다.내가 여기서 어리석은 실수를 하고 있는 걸까?아니면 Spotfire R 런타임의 버그입니까?

업데이트Spotfire 지원으로부터 실행 가능한 해결 방법을 얻었고 이를 답변으로 추가하고 싶기 때문에 질문을 다시 열고 싶습니다.

도움이 되었습니까?

해결책

Spotfire 지원팀으로부터 받은 응답을 간략하게 요약하면 다음과 같습니다.

  • 그것은 실제로 TERR의 버그입니다(분명히 TERR은 list() 구조가 제대로 작동하지 않아 생성하려는 매트릭스의 크기에 결함이 발생합니다.)그들은 현재 그것을 고치기 위해 노력하고 있습니다
  • 해결 방법으로 다음을 사용할 수 있습니다. c() 대신에 list() 데이터 정의에서

TERR에서 작동하는 데이터 정의 수정

mydata_working <- structure(
    list(
      Var1 = c(3.99083333270391, 3.99083333270391, 3.99083333270391, 3.99083333270391), 
      Var2 = c(3.99083333270391, 3.99083333270391, 3.99083333270391, 3.99083333270391)), 
    row.names = c("1", "2", "3", "4"), 
    class = "data.frame", 
    out.attrs = list(dim = c(2L, 2L), 
                     dimnames = list(
                       Var1 = c("Var1=3.99083333270391", "Var1=3.99083333270391"), 
                       Var2 = c("Var2=3.99083333270391", "Var2=3.99083333270391")
                       )
                     )
    )
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top