How to test when condition returns numeric(0) in R
You could use ?length
:
isEmpty <- function(x) {
return(length(x)==0)
}
input <- c(3, 12);
if (!isEmpty(setdiff(input, 1:9))) {
stop ("not valid")
}
How to return NA instead of numeric(0) when conditions do not return a result in R
If your always expecting exactly one value, you could do this:
item_size <- c(data_size$size[data_size$Item == item_code], NA)[1]
How to use numeric(0) in greater than testing?
What is supposed to happen when you compare a number with an empty value? Should the condition x > y evaluate to TRUE or FALSE, or should there be a different effect? One way to handle the situation is like this:
if (length(y) == 0) {
cat("y is numeric(0)")
} else {
if (x > y) {
cat("x is greater than y")
} else {
cat("x is less than or equal y")
}
}
Check if value == integer(0) in R
You can use identical
which is the safe and reliable way to test two objects for being exactly equal (from the docs):
value = integer(0)
identical(value, integer(0))
# [1] TRUE
Or do the following check:
is.integer(value) && length(value) == 0
# [1] TRUE
R: ifelse turns numeric(0) into NA
you can access the implementation of ifelse
, which is
function (test, yes, no)
{
if (is.atomic(test)) {
if (typeof(test) != "logical")
storage.mode(test) <- "logical"
if (length(test) == 1 && is.null(attributes(test))) {
#... let's skip this part..
}
}
else test <- if (isS4(test))
methods::as(test, "logical")
else as.logical(test)
ans <- test
len <- length(ans)
ypos <- which(test)
npos <- which(!test)
if (length(ypos) > 0L)
ans[ypos] <- rep(yes, length.out = len)[ypos]
if (length(npos) > 0L)
ans[npos] <- rep(no, length.out = len)[npos]
ans
}
<bytecode: 0x00000123e6b7d3a0>
<environment: namespace:base>
So, yes, it is because ifelse
is vectorized - specifically along the condition - and the return object ans
is initialized as a vector of the same length as the condition.
The description of ifelse
states
ifelse returns a value with the same shape as test which is filled
with elements selected from either yes or no depending on whether the
element of test is TRUE or FALSE.
Let test <- TRUE
. The interesting lines are
ypos <- which(test)
rep(numeric(0), length.out = 1)[ypos]
How to catch integer(0)?
That is R's way of printing a zero length vector (an integer one), so you could test for a
being of length 0:
R> length(a)
[1] 0
It might be worth rethinking the strategy you are using to identify which elements you want, but without further specific details it is difficult to suggest an alternative strategy.
R “argument is of length zero” in if(condition)
If data is a one dimension array (the binary data you showed is) rather then a matrix, vector, or other structure you can use length to find the row count. This code shows how to add a count based on matches with a one dimensional array (note I assume inc is a pascal like custom function).
data = c(1, 0, 0, 1, 1, 0)
outcome = c(0, 0, 1, 0, 1, 0)
count <- 0
for (i in 1:length(data))
{
if(outcome[i]==data[i]) {
count <- count + 1 #could then do inc(count) for package Hmisc
}
}
count
If your data is being returned as a matrix of vectors then try this code (same note on Hmisc).:
data <- read.table(text = "
0 1 0 1
0 0 1 1
1 1 0 0
1 0 1 0
0 1 0 1", header = FALSE)
data <- as.matrix(data)
outcome <- c(0, 0, 1, 0, 1)
count <- 0
for (i in 1:nrow(data))
{
if(!is.null(outcome[i]==data[i, 1])) {
count <- count + 1 #see first example
}
}
cat(count)
Note: nrow does return either an integer or NULL
Related Topics
Removing Duplicate Combinations (Irrespective of Order)
Split String Column to Create New Binary Columns
Select Groups Based on Number of Unique/Distinct Values
R Reshape Data Frame from Long to Wide Format
Sample Random Rows in Dataframe
How to Delete a Row by Reference in Data.Table
How to Plot All the Columns of a Data Frame in R
Stratified Random Sampling from Data Frame
Sum Rows in Data.Frame or Matrix
Create Counter Within Consecutive Runs of Certain Values
Can Lists Be Created That Name Themselves Based on Input Object Names
Create Grouping Variable For Consecutive Sequences and Split Vector
Fitting a Linear Model With Multiple Lhs