功能正常。但是当与 sapply 一起使用以便将向量的每个值作为参数之一传递时,我得到一个错误

Function works normally. But when used with sapply in order to pass each value of a vector as one of the arguments, I get an error

抱歉问题措辞不当!

我创建了一个函数 abc,它可以很好地处理我的数据 table,DT,它本身。

#function
abc <- function(DT, ucol="u", vcol="v", xdiff = 3) {
  #find n
  result1 = DT[DT[,x2:= x_coord. + xdiff ], on=.(y_coord, x_coord=x2), nomatch=0]
  result1[, ucol_values:=get(ucol)]
  n_points <- nrow(result1)                   #N
  
  #find (ui-uj)*(vi-vj)
  result2 = result1
  result[, prod:=(get(ucol)-get(paste0("i.",ucol)))*(get(vcol)-get(paste0("i.",vcol)))][, .(row_a=row, row_b=i.row, prod)]
  sum_prod_result<- sum(result2$prod)
    
  resultlist<- list("xdiff"=xdiff, "sum of products"=sum_prod_result, "n"=n_points)
  
  return(resultlist)
}

>abc(DT)
$`xdiff`
[1] 5

$`sum of products`
[1] -0.731064

$n
[1] 43

我有一个向量 x,我想重复该函数,其中 xdiff 等于 x 的每个值。

x <- (5,10,15,20,25)

sapply<- (xdiffs, abc, xdiff=x)

但是我在使用 sapply 时遇到以下错误:

:=(x2, x_coord.+xdiff) 中的错误: 检查 is.data.table(DT) == TRUE。否则,:= 和 :=(...) 被定义为在 j 中使用,仅一次且以特定方式。见帮助(“:=”)。

我查看了DT的class,是一个数据table。我不确定如何解决这个问题。

sapply 仅遍历提供的第一个参数,因此您需要将函数调用更改为:

sapply(x, function(i) abc(DT, xdiff = i))