R中相同长度的向量的函数

时间:2015-07-14 07:08:41

标签: r list function for-loop vector

我想创建一个函数,它应该将不同长度的向量列表重新映射到具有相同长度的向量列表。我做了两个功能,但第二个功能不好。 我的代码是: 第一个功能(效果很好)

delka<-function(x){
  delky<<-NULL
  for(i in 1:length(x)){
    delky[i]<<-length(x[[i]])
  }
}

在这里,我在全球范围内制造了对象“delky”。第二个功能是

uprava<- function(x){
  stejne<<- NULL
  for(i in 1:length(x)){
    stejne[[i]]<<-vector(x[[i]], length(max(delky)))
  }
}    

我想在全局范围内创建一个包含相同长度矢量的对象“stejne”。但是R回答我一个问题

  

向量中的错误(x [[i]],长度(max(delky))):无效的'mode'参数

你对我做错了什么有什么想法吗?

2 个答案:

答案 0 :(得分:1)

假设你可以一次处理整个列表,如果你想用NA填充较短的向量,这是一种方法。

my <- list(a = runif(5),
           b = runif(11),
           c = runif(7))

maxl <- max(sapply(my, length))

sapply(my, FUN = function(x, ml) {
  difference <- ml - length(x)
  c(x, rep(NA, difference))
}, ml = maxl, simplify = FALSE)

$a
 [1] 0.91906470 0.68651070 0.07317576 0.52985130 0.27916889         NA         NA         NA         NA         NA         NA

$b
 [1] 0.86384953 0.79707167 0.88226627 0.91590091 0.03181455 0.86493584 0.89597354 0.80890065 0.92418156 0.72947596 0.13847751

$c
 [1] 0.2576621 0.6512487 0.5806530 0.8782730 0.0262019 0.1000885 0.5245472        NA        NA        NA        NA

在另一个表示中

sapply(my, FUN = function(x, ml) {
  difference <- ml - length(x)
  c(x, rep(NA, difference))
}, ml = maxl)

               a          b         c
 [1,] 0.91906470 0.86384953 0.2576621
 [2,] 0.68651070 0.79707167 0.6512487
 [3,] 0.07317576 0.88226627 0.5806530
 [4,] 0.52985130 0.91590091 0.8782730
 [5,] 0.27916889 0.03181455 0.0262019
 [6,]         NA 0.86493584 0.1000885
 [7,]         NA 0.89597354 0.5245472
 [8,]         NA 0.80890065        NA
 [9,]         NA 0.92418156        NA
[10,]         NA 0.72947596        NA
[11,]         NA 0.13847751        NA

答案 1 :(得分:1)

假设@RomanLuštrik关于你想要做的事情是正确的,你可以使用以下内容更直接地做到这一点:

lapply(my, `length<-`, max(lengths(my)))
## $a
##  [1] 0.8669645 0.9224072 0.2003480 0.9476093 0.1095652        NA
##  [7]        NA        NA        NA        NA        NA
## 
## $b
##  [1] 0.6679763 0.2742245 0.7726615 0.4247057 0.7274648 0.8218540
##  [7] 0.4874759 0.4764729 0.3958279 0.1653358 0.2331573
## 
## $c
##  [1] 0.71882342 0.92852497 0.75134020 0.53098586 0.17515857
##  [6] 0.04997067 0.70350036         NA         NA         NA
## [11]         NA
## 

lengths函数最近才推出,因此请确保您运行的是最新版本的R。