Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Unreal "object of type 'builtin' is not subsettable" EvalException #211

Closed
marioguerriero opened this issue Jul 9, 2016 · 1 comment
Closed

Comments

@marioguerriero
Copy link

Hi. I am trying to run a function which has been defined in an external R script from my Java code. The script is evaluated correctly but when I execute it i receive the following error:

org.renjin.eval.EvalException: object of type 'builtin' is not subsettable
at org.renjin.primitives.special.DollarFunction.apply(DollarFunction.java:58)
at org.renjin.eval.Context.evaluateCall(Context.java:283)
at org.renjin.eval.Context.evaluate(Context.java:207)
at org.renjin.sexp.Promise.doEval(Promise.java:91)
at org.renjin.sexp.Promise.force(Promise.java:85)
at org.renjin.eval.Context.evaluate(Context.java:209)
at org.renjin.primitives.R$primitive$list.apply(R$primitive$list.java:39)
at org.renjin.eval.Context.evaluateCall(Context.java:283)
at org.renjin.eval.Context.evaluate(Context.java:207)
at org.renjin.invoke.codegen.ArgumentIterator.evalNext(ArgumentIterator.java:61)
at org.renjin.primitives.R$primitive$paste.apply(R$primitive$paste.java:31)
at org.renjin.primitives.special.InternalFunction.apply(InternalFunction.java:55)
at org.renjin.eval.Context.evaluateCall(Context.java:283)
at org.renjin.eval.Context.evaluate(Context.java:207)
at org.renjin.eval.Context.evaluate(Context.java:163)
at org.renjin.sexp.Closure.doApply(Closure.java:107)
at org.renjin.eval.ClosureDispatcher.apply(ClosureDispatcher.java:76)
at org.renjin.eval.ClosureDispatcher.applyClosure(ClosureDispatcher.java:61)
at org.renjin.sexp.Closure.apply(Closure.java:81)
at org.renjin.eval.Context.evaluateCall(Context.java:283)
at org.renjin.eval.Context.evaluate(Context.java:207)
at org.renjin.primitives.S3.reassembleAndEvaluateArgs(S3.java:286)
at org.renjin.primitives.S3.tryDispatchFromPrimitive(S3.java:239)
at org.renjin.primitives.R$primitive$$bracket.apply(R$primitive$$bracket.java:38)
at org.renjin.eval.Context.evaluateCall(Context.java:283)
at org.renjin.eval.Context.evaluate(Context.java:207)
at org.renjin.invoke.codegen.ArgumentIterator.evalNext(ArgumentIterator.java:61)
at org.renjin.primitives.R$primitive$$bang$eq.apply(R$primitive$$bang$eq.java:35)
at org.renjin.eval.Context.evaluateCall(Context.java:283)
at org.renjin.eval.Context.evaluate(Context.java:207)
at org.renjin.invoke.codegen.ArgumentIterator.evalNext(ArgumentIterator.java:61)
at org.renjin.primitives.R$primitive$$bar.apply(R$primitive$$bar.java:36)
at org.renjin.eval.Context.evaluateCall(Context.java:283)
at org.renjin.eval.Context.evaluate(Context.java:207)
at org.renjin.primitives.special.ParenFunction.apply(ParenFunction.java:39)
at org.renjin.eval.Context.evaluateCall(Context.java:283)
at org.renjin.eval.Context.evaluate(Context.java:207)
at org.renjin.invoke.codegen.ArgumentIterator.evalNext(ArgumentIterator.java:61)
at org.renjin.primitives.R$primitive$$amp.apply(R$primitive$$amp.java:36)
at org.renjin.eval.Context.evaluateCall(Context.java:283)
at org.renjin.eval.Context.evaluate(Context.java:207)
at org.renjin.primitives.special.ParenFunction.apply(ParenFunction.java:39)
at org.renjin.eval.Context.evaluateCall(Context.java:283)
at org.renjin.eval.Context.evaluate(Context.java:207)
at org.renjin.invoke.codegen.ArgumentIterator.evalNext(ArgumentIterator.java:61)
at org.renjin.primitives.R$primitive$$amp.apply(R$primitive$$amp.java:36)
at org.renjin.eval.Context.evaluateCall(Context.java:283)
at org.renjin.eval.Context.evaluate(Context.java:207)
at org.renjin.sexp.Promise.doEval(Promise.java:91)
at org.renjin.sexp.Promise.force(Promise.java:85)
at org.renjin.eval.Context.evaluate(Context.java:209)
at org.renjin.eval.Context.evaluateSymbol(Context.java:253)
at org.renjin.eval.Context.evaluate(Context.java:203)
at org.renjin.invoke.codegen.ArgumentIterator.evalNext(ArgumentIterator.java:61)
at org.renjin.primitives.R$primitive$which.apply(R$primitive$which.java:28)
at org.renjin.primitives.special.InternalFunction.apply(InternalFunction.java:55)
at org.renjin.eval.Context.evaluateCall(Context.java:283)
at org.renjin.eval.Context.evaluate(Context.java:207)
at org.renjin.primitives.special.AssignLeftFunction.assignLeft(AssignLeftFunction.java:60)
at org.renjin.primitives.special.AssignLeftFunction.apply(AssignLeftFunction.java:44)
at org.renjin.eval.Context.evaluateCall(Context.java:283)
at org.renjin.eval.Context.evaluate(Context.java:207)
at org.renjin.primitives.special.BeginFunction.apply(BeginFunction.java:46)
at org.renjin.eval.Context.evaluateCall(Context.java:283)
at org.renjin.eval.Context.evaluate(Context.java:207)
at org.renjin.eval.Context.evaluate(Context.java:163)
at org.renjin.sexp.Closure.doApply(Closure.java:107)
at org.renjin.eval.ClosureDispatcher.apply(ClosureDispatcher.java:76)
at org.renjin.eval.ClosureDispatcher.applyClosure(ClosureDispatcher.java:61)
at org.renjin.sexp.Closure.apply(Closure.java:81)
at org.renjin.eval.Context.evaluateCall(Context.java:283)
at org.renjin.eval.Context.evaluate(Context.java:207)
at org.renjin.invoke.codegen.ArgumentIterator.evalNext(ArgumentIterator.java:61)
at org.renjin.primitives.R$primitive$length.apply(R$primitive$length.java:28)
at org.renjin.eval.Context.evaluateCall(Context.java:283)
at org.renjin.eval.Context.evaluate(Context.java:207)
at org.renjin.primitives.special.AssignLeftFunction.assignLeft(AssignLeftFunction.java:60)
at org.renjin.primitives.special.AssignLeftFunction.apply(AssignLeftFunction.java:44)
at org.renjin.eval.Context.evaluateCall(Context.java:283)
at org.renjin.eval.Context.evaluate(Context.java:207)
at org.renjin.primitives.special.BeginFunction.apply(BeginFunction.java:46)
at org.renjin.eval.Context.evaluateCall(Context.java:283)
at org.renjin.eval.Context.evaluate(Context.java:207)
at org.renjin.primitives.special.ForFunction.apply(ForFunction.java:91)
at org.renjin.eval.Context.evaluateCall(Context.java:283)
at org.renjin.eval.Context.evaluate(Context.java:207)
at org.renjin.primitives.special.BeginFunction.apply(BeginFunction.java:46)
at org.renjin.eval.Context.evaluateCall(Context.java:283)
at org.renjin.eval.Context.evaluate(Context.java:207)
at org.renjin.eval.Context.evaluate(Context.java:163)
at org.renjin.sexp.Closure.doApply(Closure.java:107)
at org.renjin.eval.ClosureDispatcher.apply(ClosureDispatcher.java:76)
at org.renjin.eval.ClosureDispatcher.applyClosure(ClosureDispatcher.java:61)
at org.renjin.sexp.Closure.apply(Closure.java:81)
at org.renjin.eval.Context.evaluateCall(Context.java:283)
at org.renjin.eval.Context.evaluate(Context.java:207)
at org.renjin.eval.Context.evaluateExpressionVector(Context.java:266)
at org.renjin.eval.Context.evaluate(Context.java:205)
at org.renjin.script.RenjinScriptEngine.eval(RenjinScriptEngine.java:150)
at org.renjin.script.RenjinScriptEngine.eval(RenjinScriptEngine.java:109)
at it.unisannio.loganalysis.analysis.AnalyzerController.performQuery(AnalyzerController.java:43)
at it.unisannio.loganalysis.presentation.MyUI.lambda$init$0(MyUI.java:75)
at it.unisannio.loganalysis.presentation.components.QueryParameterSelector.lambda$new$61446b05$1(QueryParameterSelector.java:128)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at com.vaadin.event.ListenerMethod.receiveEvent(ListenerMethod.java:508)
at com.vaadin.event.EventRouter.fireEvent(EventRouter.java:198)
at com.vaadin.event.EventRouter.fireEvent(EventRouter.java:161)
at com.vaadin.server.AbstractClientConnector.fireEvent(AbstractClientConnector.java:1008)
at com.vaadin.ui.Button.fireClick(Button.java:377)
at com.vaadin.ui.Button$1.click(Button.java:54)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at com.vaadin.server.ServerRpcManager.applyInvocation(ServerRpcManager.java:158)
at com.vaadin.server.ServerRpcManager.applyInvocation(ServerRpcManager.java:118)
at com.vaadin.server.communication.ServerRpcHandler.handleInvocations(ServerRpcHandler.java:408)
at com.vaadin.server.communication.ServerRpcHandler.handleRpc(ServerRpcHandler.java:273)
at com.vaadin.server.communication.UidlRequestHandler.synchronizedHandleRequest(UidlRequestHandler.java:79)
at com.vaadin.server.SynchronizedRequestHandler.handleRequest(SynchronizedRequestHandler.java:41)
at com.vaadin.server.VaadinService.handleRequest(VaadinService.java:1409)
at com.vaadin.server.VaadinServlet.service(VaadinServlet.java:364)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:790)
at org.eclipse.jetty.servlet.ServletHolder.handle(ServletHolder.java:769)
at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1667)
at org.eclipse.jetty.websocket.server.WebSocketUpgradeFilter.doFilter(WebSocketUpgradeFilter.java:172)
at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1650)
at org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:583)
at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:143)
at org.eclipse.jetty.security.SecurityHandler.handle(SecurityHandler.java:577)
at org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:223)
at org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1125)
at org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:515)
at org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:185)
at org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:1059)
at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:141)
at org.eclipse.jetty.server.handler.ContextHandlerCollection.handle(ContextHandlerCollection.java:215)
at org.eclipse.jetty.server.handler.HandlerCollection.handle(HandlerCollection.java:110)
at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:97)
at org.eclipse.jetty.server.Server.handle(Server.java:497)
at org.eclipse.jetty.server.HttpChannel.handle(HttpChannel.java:311)
at org.eclipse.jetty.server.HttpConnection.onFillable(HttpConnection.java:248)
at org.eclipse.jetty.io.AbstractConnection$2.run(AbstractConnection.java:540)
at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:610)
at org.eclipse.jetty.util.thread.QueuedThreadPool$3.run(QueuedThreadPool.java:539)
at java.lang.Thread.run(Thread.java:745)

The function i

resourcesUsage <- function(users=NULL,from=NULL,to=NULL,attributes=NULL,normalize=FALSE){
  type <- unique(resources[,"type"])
  usage <- c(0)

  result <- data.frame(type,usage)

  for(r in resources$idResource) {
    t <- resources[which(resources$idResource == r),"type"]

    u <- actions[which(actions$idResource == r),"idUser"]
    u <- u[1]

    actionsCount <- length(which(
      actions$idResource == r & (
        (is.null(users) || all(users %in% u)) &
        (is.null(from) || actions$millis >= from) &
        (is.null(to) || actions$millis <= to) &
        (is.null(attributes) || length(actions[,paste("action.",attributes$key,sep="")]) > 0 &&
          attributes$value %in% actions[which(
            actions$idResource == r  & actions$idUser %in% u &
            actions[,paste("action.",attr$key,sep="")] != NAV
          ),paste("action.",attributes$key,sep="")] ) &
        (is.null(attributes) | actions[,paste("action.",attr$key,sep="")] != NAV)
      )
    ))

    oldValue <- result[which(result$type == resources[which(resources$idResource == r),"type"]),"usage"]
    result[which(result$type == resources[which(resources$idResource == r),"type"]),"usage"] <- (oldValue+actionsCount)
}

# Normalize
  if(normalize) {
    total <- sum(result[,"usage"])
    result[,"usage"] <- (result[,"usage"] / total)
  }

  result$type <- as.character(result$type)

  return(result)
}

Since the function runs properly with no errors I am assuming this is a Renjin bug.

@akbertram
Copy link
Member

I'm unable to run the code sample above because there is no "resources" variable defined.

In general, what the error message is saying is that, somewhere, you're evaluating an expression in the form x$y and x is a function, which would be an error in GNU R or in Renjin.

If the code runs in GNU R but not Renjin, then this suggests that something else has gone wrong, which leads to x being defined as a function rather than something subsettable like a list or data.frame. In the code that I can see above, perhaps resources has been assigned the wrong value?

I'm going to close this issue for now, but happy to re-open if you can share a reproducible example.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants