我正在一个项目上,试图将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”参数设置了什么?我希望我很清楚,对不起我的英语不好,谢谢您!
答案 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循环的单个迭代中,banddepthforonecurve
(x
)的 first 参数将是allubset[, 1]
,然后是allsubset[, 2]
, ...,allsubset[, ncol(allsubset)]
。
xdata
参数始终为x
,tau
和use
参数始终为tau
和use
,而{{1 }}循环迭代for
的列以用作y
参数。您可以将其视为嵌套循环,对于ydata
的每一列,将其用作y
,然后(通过ydata
)遍历apply
的所有列。>
(如果apply的allsubset
参数为MAR
,则它将遍历行而不是 columns 。)