将na.rm添加到具有多个参数的函数

时间:2019-05-08 08:09:15

标签: r na

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行之后的行越来越不适用。 我正在尝试使用acvf中的library(itsmr)函数查找各列的自协方差lag1。为了获得lag1,我添加了1作为参数。

acvf(mydata$x1, 1)
acvf(mydata$x2, 1) 

当我尝试向功能中添加na.rm时,出现此错误;

  

acvf(mydata $ x2,1,na.rm = T)错误acvf(mydata $ x2,1,na.rm = T):   未使用的参数(na.rm = T)

那么我该如何忽略带有na.rm或其他解决方案的列中的NA?

2 个答案:

答案 0 :(得分:1)

您要调用的函数没有na.rm这样的参数,也没有任何等效参数。

要实现所需的功能,您需要修改函数提供的数据。

您可以使用子集和is.na函数来仅保留非NA的值。 即

acvf(mydata$x2[!is.na(mydata$x2)], 1)

答案 1 :(得分:1)

该函数中没有na.rm参数。您可以将sapplyna.omit包裹在列上,从而在数据框上应用该函数。

t(sapply(mydata, function(x) acvf(na.omit(x), 1)))
#           [,1]        [,2]
# x1 0.005023011 0.001431919
# x2 2.638501561 0.283323151