将 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