将 na.rm 添加到具有多个参数的函数
Adding na.rm to a function with multiple arguments
mydata<-structure(list(x1 = c(0, 0, 0, 0, 0, 0, 0, 0, 0, 0.6, 0.2, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0), x2 = c(0, 0, 0, 0, 0, 0.4, 0.2, 0, 0, 0, 0, 0.8, 9.2,
0.6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, NA, NA,
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA)), .Names = c("x1",
"x2"), class = "data.frame", row.names = c(NA, -78L))
我的数据中有 2 列。第一个有 78 行,第二个有 31 行。因此,当我直接从 txt 导入它们时,第 31 行之后的行将变为 NA。
我正在尝试使用 library(itsmr)
中的 acvf
函数找到每列的自协方差 lag1。为了获得 lag1
,我添加了 1
作为参数。
acvf(mydata$x1, 1)
acvf(mydata$x2, 1)
当我尝试将 na.rm
添加到函数中时出现此错误;
acvf(mydata$x2, 1, na.rm = T) Error in acvf(mydata$x2, 1, na.rm = T) :
unused argument (na.rm = T)
那么如何在 na.rm
或其他解决方案的列中忽略 NA?
您正在调用的函数没有 na.rm
这样的参数,也没有任何等效参数。
要实现您想要的效果,您需要修改提供给函数的数据。
您可以使用子集化和 is.na
函数来仅保留非 NA 的值。
即
acvf(mydata$x2[!is.na(mydata$x2)], 1)
该函数中没有 na.rm
参数。您可以使用 sapply
和围绕列的 na.omit
将函数应用于数据框。
t(sapply(mydata, function(x) acvf(na.omit(x), 1)))
# [,1] [,2]
# x1 0.005023011 0.001431919
# x2 2.638501561 0.283323151
mydata<-structure(list(x1 = c(0, 0, 0, 0, 0, 0, 0, 0, 0, 0.6, 0.2, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0), x2 = c(0, 0, 0, 0, 0, 0.4, 0.2, 0, 0, 0, 0, 0.8, 9.2,
0.6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, NA, NA,
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA)), .Names = c("x1",
"x2"), class = "data.frame", row.names = c(NA, -78L))
我的数据中有 2 列。第一个有 78 行,第二个有 31 行。因此,当我直接从 txt 导入它们时,第 31 行之后的行将变为 NA。
我正在尝试使用 library(itsmr)
中的 acvf
函数找到每列的自协方差 lag1。为了获得 lag1
,我添加了 1
作为参数。
acvf(mydata$x1, 1)
acvf(mydata$x2, 1)
当我尝试将 na.rm
添加到函数中时出现此错误;
acvf(mydata$x2, 1, na.rm = T) Error in acvf(mydata$x2, 1, na.rm = T) : unused argument (na.rm = T)
那么如何在 na.rm
或其他解决方案的列中忽略 NA?
您正在调用的函数没有 na.rm
这样的参数,也没有任何等效参数。
要实现您想要的效果,您需要修改提供给函数的数据。
您可以使用子集化和 is.na
函数来仅保留非 NA 的值。
即
acvf(mydata$x2[!is.na(mydata$x2)], 1)
该函数中没有 na.rm
参数。您可以使用 sapply
和围绕列的 na.omit
将函数应用于数据框。
t(sapply(mydata, function(x) acvf(na.omit(x), 1)))
# [,1] [,2]
# x1 0.005023011 0.001431919
# x2 2.638501561 0.283323151