R函数歧义调用

时间:2019-03-04 16:04:12

标签: r

我正在一个项目上,试图将R函数转换为CUDA C ++,但是我听不懂R函数的调用,我对R真的很陌生,我找不到我真正的东西。照顾。确切地说,这是主要的R函数代码:

 async addState(state) {
    let key = this.ctx.stub.createCompositeKey(this.name, state.getSplitKey());
    let data = State.serialize(state);
    await this.ctx.stub.putState(key, data);
}

我真正不了解的部分是“ banddepthforonecurve”功能调用,这是“ banddepthforonecurve”功能代码:

for (i in 1:ncy) {
    res <- apply(allsubset, 2, banddepthforonecurve, xdata=x, ydata=y[,i], tau=tau, use=use)
    depth[i] <- sum(res[1,])
    localdepth[i] <- sum(res[2,])
  }

在调用时:

banddepthforonecurve <- function(x, xdata, ydata, tau, use) {
    envsup <- apply(xdata[,x], 1, max)
    envinf <- apply(xdata[,x], 1, min)
    inenvsup <- ydata <= envsup
    inenvinf <- ydata >= envinf
    depth <- all(inenvsup) & all(inenvinf)
    localdepth <- depth & use(envsup-envinf) <= tau
    res <- c(depth,localdepth)
    return(res)
  }

我真的不知道它为“ banddepthforonecurve”的第一个参数“ x”设置的是什么,我认为它像res <- apply(allsubset, 2, banddepthforonecurve, xdata=x, ydata=y[,i], tau=tau, use=use)

但是如果我尝试在R Studio上单独运行它以更好地理解它,我会得到:

banddepthforonecurve(i, xdata=x, ydata=y[,i], tau = tau, use=use)

为什么当我编译整个R项目时没有此错误?在“ res <-apply(...)”中调用时,它为“ x”参数设置了什么?我希望我很清楚,对不起我的英语不好,谢谢您!

1 个答案:

答案 0 :(得分:3)

# This apply function
res = apply(X = input, MAR = 2, FUN = foo, ...)

# is essentially syntactical sugar for this:
res = list()
for(i in 1:ncol(X)) {
    res[[i]] = foo(X[, i], ...)
}
# plus an attempt simplify `res` (e.g., to a matrix or vector)

所以在您的行中:

apply(allsubset, 2, banddepthforonecurve, xdata=x, ydata=y[,i], tau=tau, use=use)

在for循环的单个迭代中,banddepthforonecurvex)的 first 参数将是allubset[, 1],然后是allsubset[, 2], ...,allsubset[, ncol(allsubset)]

xdata参数始终为xtauuse参数始终为tauuse,而{{1 }}循环迭代for的列以用作y参数。您可以将其视为嵌套循环,对于ydata的每一列,将其用作y,然后(通过ydata)遍历apply的所有列。

(如果apply的allsubset参数为MAR,则它将遍历而不是 columns 。)