R 中的 NA 值问题
Issue with NA values in R
我觉得这应该很简单,我在网上查过,但总是收到错误消息。我过去做过很多分析,但我是 R 和编程的新手。
我有一个非常基本的函数来计算 x 列数据的平均值:
columnmean <-function(y){
nc <- ncol(y)
means <- numeric(nc)
for(i in 1:nc) {
means[i] <- mean(y[,i])
}
means
}
我在 RStudio 中并使用包含的 'airquality' 数据集对其进行测试。当我加载 AQ 数据集和 运行 我的函数时:
data("airquality")
columnmean(airquality)
我回来了:
不适用 不适用 9.957516 77.882353 6.993464 15.803922
因为AQ中的前两个变量里面有NA。 K,酷。我想抑制 NA,这样 R 将忽略它们,并且 运行 函数仍然存在。
我读到我可以用 na.rm=TRUE 指定它,例如:
columnmean(airquality, na.rm = TRUE)
但是当我这样做时,我收到一条错误消息:
“列均值错误(空气质量,na.rm = TRUE):
未使用的参数 (na.rm = TRUE)"
我正在阅读所有我只需要包含 na.rm = TRUE 并且函数将 运行 并忽略 NA 值的地方...但我一直收到此错误。我也试过 use = "complete" 和我能找到的任何其他东西。
两个注意事项:
我知道我可以用 is.na 创建一个向量,然后对数据进行子集化,但我不需要那个额外的步骤,我只希望它成为 运行 函数并忽略丢失的数据.
我也知道我可以在函数中指定忽略或不忽略,但我想要一种方法来选择 ignore/not 即时忽略,逐个操作,而不是让它是函数本身的一部分。
感谢您的帮助。谢谢大家。
您应该在 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
是自定义函数,没有那个参数。
我们可以在 mean
中包含 na.rm = TRUE
columnmean <-function(y){
nc <- ncol(y)
means <- numeric(nc)
for(i in 1:nc) {
means[i] <- mean(y[,i], na.rm = TRUE)
}
means
}
如果我们需要将 na.rm
参数有时用作 FALSE 而有时用作 TRUE,则在 'columnmean'
的参数中指定
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")
您可以将参数 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
但我的建议是寻找替代循环代码:
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
我觉得这应该很简单,我在网上查过,但总是收到错误消息。我过去做过很多分析,但我是 R 和编程的新手。
我有一个非常基本的函数来计算 x 列数据的平均值:
columnmean <-function(y){
nc <- ncol(y)
means <- numeric(nc)
for(i in 1:nc) {
means[i] <- mean(y[,i])
}
means
}
我在 RStudio 中并使用包含的 'airquality' 数据集对其进行测试。当我加载 AQ 数据集和 运行 我的函数时:
data("airquality")
columnmean(airquality)
我回来了:
不适用 不适用 9.957516 77.882353 6.993464 15.803922
因为AQ中的前两个变量里面有NA。 K,酷。我想抑制 NA,这样 R 将忽略它们,并且 运行 函数仍然存在。
我读到我可以用 na.rm=TRUE 指定它,例如:
columnmean(airquality, na.rm = TRUE)
但是当我这样做时,我收到一条错误消息:
“列均值错误(空气质量,na.rm = TRUE): 未使用的参数 (na.rm = TRUE)"
我正在阅读所有我只需要包含 na.rm = TRUE 并且函数将 运行 并忽略 NA 值的地方...但我一直收到此错误。我也试过 use = "complete" 和我能找到的任何其他东西。
两个注意事项:
我知道我可以用 is.na 创建一个向量,然后对数据进行子集化,但我不需要那个额外的步骤,我只希望它成为 运行 函数并忽略丢失的数据.
我也知道我可以在函数中指定忽略或不忽略,但我想要一种方法来选择 ignore/not 即时忽略,逐个操作,而不是让它是函数本身的一部分。
感谢您的帮助。谢谢大家。
您应该在 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
是自定义函数,没有那个参数。
我们可以在 mean
na.rm = TRUE
columnmean <-function(y){
nc <- ncol(y)
means <- numeric(nc)
for(i in 1:nc) {
means[i] <- mean(y[,i], na.rm = TRUE)
}
means
}
如果我们需要将 na.rm
参数有时用作 FALSE 而有时用作 TRUE,则在 'columnmean'
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")
您可以将参数 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
但我的建议是寻找替代循环代码:
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