循环错误:is.na()应用于类型' NULL'的非(列表或向量)。

时间:2017-04-09 13:06:59

标签: r loops na

我尝试为数据框中的每一列计算NA,如此

a = c('a', 'b', NA)
b = c('a', NA, NA)
c = c(NA, NA, NA)
data = data.frame(cbind(a, b, c))

这有效

sum(is.na(data$a))

但是当我尝试使用LOOP时

for(i in data[, 1:3]) {

  k=sum(is.na(data$i)) 
  cat(k, '\n')
}

我得到了

Warning messages:
1: In is.na(data$i) :
  is.na() applied to non-(list or vector) of type 'NULL'

如何解决?感谢名单

2 个答案:

答案 0 :(得分:1)

如何使用循环索引数据框(而不是数据框本身)

# use 1:3 as index for the columns
for(i in 1:3) {
  # instead of data$i; use data[ , i] to 
  # select all rows and the ith colum
  k=sum(is.na(data[ , i])) 
  cat(k, '\n')
}

您可能也想要探索应用函数,而不是循环遍历列。

答案 1 :(得分:1)

你可以使用apply这样的匿名函数:

apply(data, 2,  function(x) sum(is.na(x)) )