首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >是否使用值填充向量以使长度合适?

是否使用值填充向量以使长度合适?
EN

Stack Overflow用户
提问于 2018-05-30 22:53:23
回答 2查看 40关注 0票数 0

我想知道在R中有没有像foo一样的原语函数:

代码语言:javascript
代码运行次数:0
运行
复制
foo <- function(a, b) {
  makeSmallerVectAsLonger <- function(smaller, longer) {
    lengthDiff <- length(longer) - length(smaller)
    c(smaller, rep(0, lengthDiff))
  }
  lengthA <- length(a)
  lengthB <- length(b)
  if(lengthA  > lengthB) {
    b <- makeSmallerVectAsLonger(b, a) 
  }
  if(lengthA  < lengthB) {
    a <- makeSmallerVectAsLonger(a, b)
  }
  list(a, b)
} 

所以当我运行foo(1:9, 1:5)时,我应该会得到两个向量的列表:

第一个:

1, 2, 3, 4, 5, 6, 7, 8, 9

第二个:

1, 2, 3, 4, 5, 0, 0, 0, 0

EN

回答 2

Stack Overflow用户

发布于 2018-05-30 23:48:36

我不认为有,但你可以简化你的函数相当多:

代码语言:javascript
代码运行次数:0
运行
复制
expand_vecs <- function(a,b)
{
    base <- numeric(max(length(a),length(b)))
    lapply(list(a,b), function(x) replace(base,seq_along(x),x))
}

expand_vecs(1:9, 1:5)
[[1]]
[1] 1 2 3 4 5 6 7 8 9

[[2]]
[1] 1 2 3 4 5 0 0 0 0

这可以很容易地扩展为接受任意数量的输入:

代码语言:javascript
代码运行次数:0
运行
复制
expand_vecs <- function(..., default=0)
{
    vecs <- list(...)
    base_length <- max(sapply(vecs,length))
    base <- rep(default,base_length)
    lapply(vecs, function(x) replace(base,seq_along(x),x))
}

expand_vecs(rnorm(5),sample(1:10,3),3)
[[1]]
[1] -1.7961210 -0.2844418 -1.1059407 -0.6908350 -0.7752376

[[2]]
[1]  9 10  8  0  0

[[3]]
[1] 3 0 0 0 0
票数 2
EN

Stack Overflow用户

发布于 2018-05-30 23:29:10

我能想到的最近的选择是使用qpcR:::cbind.na函数。OP向量的情况下的答案是:

代码语言:javascript
代码运行次数:0
运行
复制
qpcR:::cbind.na(1:9, 1:5)
#      [,1] [,2]
# [1,]    1    1
# [2,]    2    2
# [3,]    3    3
# [4,]    4    4
# [5,]    5    5
# [6,]    6   NA
# [7,]    7   NA
# [8,]    8   NA
# [9,]    9   NA
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50607750

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档