如果元素的向量u
和向量i
中的索引向量x
,我们如何在u
之后将x
的元素插入i
与x <- c('a','b','c','d','e')
u <- c('X','X')
i <- c(2,3)
# now we want to get c('a','b','X','c','X','d','e')
中的索引相对应的元素,没有迭代?
例如
template <class T>
void fct(T* a, std::remove_reference<T*>::type b) {
我想一步完成(即避免循环),因为每一步都需要创建一个新的向量,实际上这些都是长向量。
我希望有一些索引魔法。
答案 0 :(得分:6)
我认为只要i
不包含重复索引,这就应该有效。
idx <- sort(c(seq_along(x), i))
y <- x[idx]
y[duplicated(idx)] <- u
y
#[1] "a" "b" "X" "c" "X" "d" "e"
修改的
正如@MartinMorgan在评论中所建议的那样,更好的方法是做到这一点
c(x, u)[order(c(seq_along(x), i))]
。
答案 1 :(得分:1)
与此同时,我想出了一些可以完成工作的东西(假设i
中的索引是唯一的):
xn <- rep(NA,length(x))
xn[i] <- u
y <- c(rbind(x,xn))
y <- y[!is.na(y)]
答案 2 :(得分:1)
这是我的功能
# vec->source vector, val->values to insert, at->positions to insert
func_insert_vector_at <- function(vec, val, at){
out=numeric(length(vec)+length(val))
out[at]=NA
out[!is.na(out)]=vec
out[at]=val
return(out)
}