功能正常。但是当与 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))
抱歉问题措辞不当!
我创建了一个函数 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))