R中NA值的问题

R中NA值的问题,r,function,missing-data,na.rm,R,Function,Missing Data,Na.rm,我觉得这应该是一件容易的事情,我已经在网上查过了,但我一直收到错误消息。我在过去做过很多分析,但我对R和编程是新手 我有一个非常基本的函数来计算x列数据的平均值: columnmean <-function(y){ nc <- ncol(y) means <- numeric(nc) for(i in 1:nc) { means[i] <- mean(y[,i]) } means } 我回来了: NA NA 9.957516 77.88

我觉得这应该是一件容易的事情,我已经在网上查过了,但我一直收到错误消息。我在过去做过很多分析,但我对R和编程是新手

我有一个非常基本的函数来计算x列数据的平均值:

columnmean <-function(y){
  nc <- ncol(y)
  means <- numeric(nc)
  for(i in 1:nc) {
    means[i] <- mean(y[,i])
  }
    means 
}
我回来了:

NA NA 9.957516 77.882353 6.993464 15.803922

因为AQ中的前两个变量包含NAs。K、 酷。我想抑制NAs,这样R将忽略它们并无论如何运行该函数

我读到我可以用na.rm=TRUE来指定它,比如:

columnmean(airquality, na.rm = TRUE)
但当我这样做时,我会收到一条错误消息,上面说:

“列平均值错误(空气质量,na.rm=TRUE): 未使用的参数(na.rm=TRUE)”

我读遍了所有我只需要包含na.rm=TRUE的地方,函数将运行并忽略na值…但我一直得到这个错误。我还尝试过使用=“complete”和我能找到的任何其他内容

两个警告:

我知道我可以用is.na创建一个向量,然后对数据进行子集,但我不想做额外的步骤,我只想让它运行函数并忽略缺少的数据

我也知道我可以在函数中指定忽略或不忽略,但我希望有一种方法可以选择动态忽略/不忽略,一个动作一个动作,而不是让它成为函数本身的一部分


谢谢你的帮助。谢谢大家。

您应该在
mean
函数调用中使用该参数:

columnmean <-function(y){
  nc <- ncol(y)
  means <- numeric(nc)
  for(i in 1:nc) {
    means[i] <- mean(y[,i], na.rm = TRUE)
  }
    means 
}

columnmean我们可以将
na.rm=TRUE
包含在
mean

columnmean <-function(y){
  nc <- ncol(y)
  means <- numeric(nc)
  for(i in 1:nc) {
    means[i] <- mean(y[,i], na.rm = TRUE)
  }
   means 
}
数据
df1您可以将参数
na.rm
传递给您的函数:

columnmean <- function(y, na.rm = FALSE){
  nc <- ncol(y)
  means <- numeric(nc)
  for(i in 1:nc) {
    means[i] <- mean(y[,i], na.rm = na.rm)
  }
  means 
}

data("airquality")
columnmean(airquality, na.rm = TRUE)
#[1] 42.129310 185.931507   9.957516  77.882353   6.993464  15.803922

columnmean(airquality)
#[1]        NA        NA  9.957516 77.882353  6.993464 15.803922

columnmean您必须在
mean
中包含
na.rm=TRUE
在R中已经有一个内置函数:
colMeans(airquality,na.rm=TRUE)
@MrFlick-是的,我知道,我正在自学用R编写函数,所以我选择了一个非常简单的函数,我知道我可以很容易地检查它。谢谢您的回答。我读过关于该选项的内容,但理想情况下,我希望能够在调用中指定是否忽略……有时我想忽略NAs,有时我不想。这不是一个选项?@Adam_S那么你可以在函数参数中使用3个点
平均值
是的,完美。非常感谢您花时间回答一个非常基本的问题!谢谢你的回答。另一种说法是…因为这是我编写的函数,所以调用它时不能指定ignore NAs Y/N,我必须在编写函数时指定它?有时我想忽略NAs,但有时我不想。这不是一个选择吗?
columnmean <-function(y, ...){
    nc <- ncol(y)
  means <- numeric(nc)
   for(i in 1:nc) {
     means[i] <- mean(y[,i], ...)
   }
   means 
  }

columnmean(df1, na.rm = TRUE)
#[1] 1.5000000 0.3333333
 columnmean(df1, na.rm = FALSE)
#[1] 1.5  NA
 df1 <- structure(list(num = c(1L, 1L, 2L, 2L), x1 = c(1L, NA, 0L, 0L
 )), .Names = c("num", "x1"), row.names = c(NA, -4L), class = "data.frame")
columnmean <- function(y, na.rm = FALSE){
  nc <- ncol(y)
  means <- numeric(nc)
  for(i in 1:nc) {
    means[i] <- mean(y[,i], na.rm = na.rm)
  }
  means 
}

data("airquality")
columnmean(airquality, na.rm = TRUE)
#[1] 42.129310 185.931507   9.957516  77.882353   6.993464  15.803922

columnmean(airquality)
#[1]        NA        NA  9.957516 77.882353  6.993464 15.803922
column_mean <- function(y, na.rm = FALSE) {
  sapply(y, function(x) mean(x, na.rm = na.rm))
}

column_mean(airquality, na.rm = TRUE)
#     Ozone    Solar.R       Wind       Temp      Month        Day 
# 42.129310 185.931507   9.957516  77.882353   6.993464  15.803922