diff --git a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/access/vector/CachedExtractVectorNode.java b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/access/vector/CachedExtractVectorNode.java
index 589acd316b992ddc87812d2e6fb7306c88c4562d..eb2f361dadc14089dcda2eb3dba83a24d268cb7e 100644
--- a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/access/vector/CachedExtractVectorNode.java
+++ b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/access/vector/CachedExtractVectorNode.java
@@ -330,7 +330,7 @@ final class CachedExtractVectorNode extends CachedVectorNode {
                     Object result;
                     if (dataAt == RNull.instance) {
                         result = RNull.instance;
-                    } else if (positions[i] instanceof RAbstractContainer && ((RAbstractContainer) positions[i]).getLength() == 0) {
+                    } else if (positionsCheckNode.isEmptyPosition(i, positions[i])) {
                         result = RNull.instance;
                     } else {
                         result = extract(i, (RAbstractStringVector) dataAt, positions[i], positionProfile[i]);
diff --git a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/access/vector/PositionCheckNode.java b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/access/vector/PositionCheckNode.java
index 9dffa7e5111fdd7459b8c5f77352b2daa85eed54..952e52fa7759fc7a4a99526d544195f7ffc589ae 100644
--- a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/access/vector/PositionCheckNode.java
+++ b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/access/vector/PositionCheckNode.java
@@ -37,6 +37,7 @@ import com.oracle.truffle.r.runtime.RError;
 import com.oracle.truffle.r.runtime.RRuntime;
 import com.oracle.truffle.r.runtime.RType;
 import com.oracle.truffle.r.runtime.data.RDataFactory;
+import com.oracle.truffle.r.runtime.data.REmpty;
 import com.oracle.truffle.r.runtime.data.RMissing;
 import com.oracle.truffle.r.runtime.data.RTypedValue;
 import com.oracle.truffle.r.runtime.data.model.RAbstractContainer;
@@ -52,6 +53,7 @@ abstract class PositionCheckNode extends Node {
     protected final int numDimensions;
     private final VectorLengthProfile positionLengthProfile = VectorLengthProfile.create();
     private final ConditionProfile nullDimensionsProfile = ConditionProfile.createBinaryProfile();
+    private final ValueProfile positionClassProfile = ValueProfile.createClassProfile();
     protected final BranchProfile error = BranchProfile.create();
     protected final boolean replace;
     protected final RType containerType;
@@ -277,4 +279,12 @@ abstract class PositionCheckNode extends Node {
 
     }
 
+    public boolean isEmptyPosition(Object position) {
+        if (positionClass == REmpty.class) {
+            return false;
+        }
+        Object castPosition = positionClassProfile.profile(position);
+        return castPosition instanceof RAbstractContainer && ((RAbstractContainer) castPosition).getLength() == 0;
+    }
+
 }
diff --git a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/access/vector/PositionCheckSubscriptNode.java b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/access/vector/PositionCheckSubscriptNode.java
index bc43a33bc3f77f8bb4bdec0c85238637caa52577..f59b3838d79be3793b6151180a76a38b307b7ad5 100644
--- a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/access/vector/PositionCheckSubscriptNode.java
+++ b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/access/vector/PositionCheckSubscriptNode.java
@@ -100,9 +100,7 @@ abstract class PositionCheckSubscriptNode extends PositionCheckNode {
         }
         assert positionLength == 1;
         positionNACheck.enable(position);
-        RAbstractVector result = doIntegerImpl(profile, dimSize, position.getDataAt(0), position, getNamesNode);
-        return result;
-
+        return doIntegerImpl(profile, dimSize, position.getDataAt(0), position, getNamesNode);
     }
 
     private RAbstractVector doIntegerImpl(PositionProfile profile, int dimSize, int value, RAbstractVector originalVector, GetNamesAttributeNode getNamesNode) {
diff --git a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/access/vector/PositionsCheckNode.java b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/access/vector/PositionsCheckNode.java
index 3ab96e71be61213a05440038eba694b6d25bac6b..38d0127dda7cd0c8995b48fbae41221589106cfb 100644
--- a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/access/vector/PositionsCheckNode.java
+++ b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/access/vector/PositionsCheckNode.java
@@ -194,4 +194,8 @@ final class PositionsCheckNode extends Node {
         boolean containsNA;
 
     }
+
+    public boolean isEmptyPosition(int i, Object position) {
+        return positionsCheck[i].isEmptyPosition(position);
+    }
 }