【发布时间】:2020-11-15 12:04:25
【问题描述】:
让我们想象一下矢量c(2,3)。我想添加到这个向量编号 4 但在第四位(所以第三个应该是空的,用 NA 填充)
要向向量添加数字,我们可以简单地使用append(c(2,3),4,after=3)。但是我们最终会得到向量 c(2,3,4) 而不是 c(2,3,NA,4) 我知道这是预期的,因为这是 append 函数的工作方式,但是有什么简单的方法可以解决这个问题吗?
【问题讨论】:
让我们想象一下矢量c(2,3)。我想添加到这个向量编号 4 但在第四位(所以第三个应该是空的,用 NA 填充)
要向向量添加数字,我们可以简单地使用append(c(2,3),4,after=3)。但是我们最终会得到向量 c(2,3,4) 而不是 c(2,3,NA,4) 我知道这是预期的,因为这是 append 函数的工作方式,但是有什么简单的方法可以解决这个问题吗?
【问题讨论】:
你可以使用这个功能:
append_at_k <- function(vec, k, value) {
vec[k] <- value
vec
}
append_at_k(c(2,3), 4, 4)
#[1] 2 3 NA 4
【讨论】:
您可以编写自己的函数,其签名与 append 相同,例如:
myAppend <- function(x,values,after=length(x)) {
if(after < length(x)) stop("after must be at least length(x)")
c(x,rep(NA,after-length(x)),values)
}
【讨论】:
这行得通吗:
insert_num <- function(vec, num, pos){
if(pos == (length(vec)+1)) {vec[pos] = num}
else{
vec[(length(vec)+1):(pos-1)] = NA
vec[pos] = num
}
vec
}
v
[1] 2 3
insert_num(v,4,3)
[1] 2 3 4
insert_num(v,4,5)
[1] 2 3 NA NA 4
【讨论】:
我们可以使用replace
append_at_k <- function(vec, k, value) {
replace(vec, k, value)
}
append_at_k(c(2,3), 4, 4)
#[1] 2 3 NA 4
【讨论】: