Это сработало для меня:
replace_na_with_last<-function(x,a=!is.na(x)){
x[which(a)[c(1,1:sum(a))][cumsum(a)+1]]
}
> replace_na_with_last(c(1,NA,NA,NA,3,4,5,NA,5,5,5,NA,NA,NA))
[1] 1 1 1 1 3 4 5 5 5 5 5 5 5 5
> replace_na_with_last(c(NA,"aa",NA,"ccc",NA))
[1] "aa" "aa" "aa" "ccc" "ccc"
скорость тоже разумная:
> system.time(replace_na_with_last(sample(c(1,2,3,NA),1e6,replace=TRUE)))
user system elapsed
0.072 0.000 0.071
class StackADT<T>(var capacity: Int) {
private var top = -1
private val stack: ArrayList<T> = ArrayList(capacity)
fun push(element: T) {
if (top == capacity)
throw Exception("Overflow occurred in stack!!")
top++
stack.add(element)
}
...
Вы можете проверить здесь: Kotlin Playground
Другой способ:
var stack = arrayOfNulls<Any?>(capacity) as Array<T>