如果(条件),R“参数长度为零”

时间:2015-03-29 17:36:42

标签: r if-statement arguments zero

R很新,如果你能告诉我我做错了什么,我将不胜感激。

这是我的初始代码:

count <- 0
for (i in 1:nrow(data))
{
    if(outcome[i]==data[1,i])
    inc(count) <- 1  #package Hmisc
}

其中结果和数据[1]是具有二进制值的向量,例如。 [1,0,0,1,1,0 ..]

我使用if语句获得了'参数长度为零'的结果。使用匹配/不匹配的行单独测试它,发现结果仅显示在后者中。

所以我将我的代码修改为:

count <- 0
for (i in 1:nrow(data))
{
    if(!is.null(outcome[i]==data[1,i]))
    inc(count) <- 1  #package Hmisc
}

现在返回的值是'for&#39;迭代。

这是不是意味着R不会为新代码中的任何不匹配返回空值?这是怎么回事?解决方案好吗?

1 个答案:

答案 0 :(得分:0)

如果数据是一维数组(您显示的二进制数据)而不是矩阵,向量或其他结构,则可以使用length来查找行数。此代码显示了如何基于与一维数组的匹配来添加计数(注意我假设inc是像自定义函数一样的pascal)。

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

如果你的数据作为向量矩阵返回,那么试试这个代码(关于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)

注意:nrow确实返回一个整数或NULL