在函数内取差时出错

Error taking the difference within a function

下面的函数是我以前在 fulldiam 是矢量时能够使用的函数。

dN <- sapply(df,function(dn,fulldiam) 0.5*(head(dn,-1)+tail(dn,-1))*
                       abs(diff(log10(fulldiam))),fulldiam)

在此函数中,df 是一个数字 data.frame(dim = 99 x 1399),fulldiam 是一个数字向量(长度 = 99)。

我试图通过将 fulldiam 向量更改为每个向量略有不同的位置来更改数据。所以现在我正在尝试使用 fulldiam_shifted 这是一个数字 data.frame (dim = 99 x 1399)。当我尝试 运行 带有更改的函数时,出现错误。

dN_shift <- sapply(df,function(dn,fulldiam_shifted) 0.5*(head(dn,-1)+tail(dn,-1))*
                       abs(diff(log10(fulldiam_shifted))),fulldiam_shifted)

Error in r[i1] - r[-length(r):-(length(r) - lag + 1L)] : 
  non-numeric argument to binary operator

我认为问题在于 fulldiam_shifted 需要为 df 的每一行调用每一列。有什么建议可以让这个功能发挥作用吗?

我们可以在这里使用Map,因为两个数据集的维度相同

Map(function(dn, fulldiam_new) 0.5*(head(dn,-1)+tail(dn,-1))*
                       abs(diff(log10(fulldiam_new))), df, fulldiam_shifted)