diff --git a/com.oracle.truffle.r.engine/src/com/oracle/truffle/r/engine/interop/RAbstractVectorAccessFactory.java b/com.oracle.truffle.r.engine/src/com/oracle/truffle/r/engine/interop/RAbstractVectorAccessFactory.java
index 0628f9d52f7c20aa1637779721dbad8487a74b72..349586e1f3c1f4bdf195499d046e9b8243905e2c 100644
--- a/com.oracle.truffle.r.engine/src/com/oracle/truffle/r/engine/interop/RAbstractVectorAccessFactory.java
+++ b/com.oracle.truffle.r.engine/src/com/oracle/truffle/r/engine/interop/RAbstractVectorAccessFactory.java
@@ -325,11 +325,25 @@ public final class RAbstractVectorAccessFactory implements StandardFactory {
             @Override
             public Object execute(VirtualFrame frame) {
                 RAbstractVector arg = (RAbstractVector) ForeignAccess.getReceiver(frame);
-                return arg.getLength() == 1;
+                return arg.getLength() == 1 && isUnBoxable(arg);
             }
         });
     }
 
+    private static boolean isUnBoxable(RAbstractVector vector) {
+        Object o = vector.getDataAtAsObject(0);
+        return isPrimitive(o);
+    }
+
+    private static boolean isPrimitive(Object element) {
+        if (element == null) {
+            return false;
+        }
+        final Class<?> elementType = element.getClass();
+        return elementType == String.class || elementType == Character.class || elementType == Boolean.class || elementType == Byte.class || elementType == Short.class ||
+                        elementType == Integer.class || elementType == Long.class || elementType == Float.class || elementType == Double.class;
+    }
+
     @Override
     public CallTarget accessHasSize() {
         return Truffle.getRuntime().createCallTarget(new InteropRootNode() {