#r
#r
Вопрос:
Я работаю над проектом, пытаюсь преобразовать функцию R в CUDA C , но я не могу понять некоторые вызовы функций R, я действительно новичок в R и не могу найти то, что мне действительно нужно. Если быть точным, это основной код функции R.:
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», это код функции «banddepthforonecurve»:
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) amp; all(inenvinf)
localdepth <- depth amp; use(envsup-envinf) <= tau
res <- c(depth,localdepth)
return(res)
}
Когда она вызывается в:
res <- apply(allsubset, 2, banddepthforonecurve, xdata=x, ydata=y[,i], tau=tau, use=use)
Я действительно не понимаю, что он установил для первого параметра «x» «banddepthforonecurve», я предположил, что это похоже banddepthforonecurve(i, xdata=x, ydata=y[,i], tau = tau, use=use)
но если я попытаюсь запустить его отдельно в R studio, чтобы попытаться лучше понять это, я получу:
apply(xdata[, x], 1, max) : dim(X) must have a positive length
Почему, когда я компилирую весь проект R, этой ошибки нет? Что она устанавливает для параметра «x» при вызове в «res <- apply(…)»? Надеюсь, я выразился ясно, извините за мой плохой английский, заранее благодарю вас!
Ответ №1:
# 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
) будет allubset[, 1]
, затем allsubset[, 2]
, …, allsubset[, ncol(allsubset)]
.
xdata
Параметром всегда является x
, параметрами tau
and use
всегда являются tau
и use
, и for
цикл перебирает столбцы y
для использования в качестве ydata
аргумента. Вы можете представить это как вложенный цикл, для каждого столбца y
используйте его как ydata
и (через apply
) выполняйте итерации по всем столбцам allsubset
.
(Если бы MAR
аргументом apply был 1
, то итерация выполнялась бы по строкам вместо столбцов.)
Комментарии:
1. Большое вам спасибо! Это именно то, что я искал!