我想创建一个函数,它应该将不同长度的向量列表重新映射到具有相同长度的向量列表。我做了两个功能,但第二个功能不好。 我的代码是: 第一个功能(效果很好)
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'参数
你对我做错了什么有什么想法吗?
答案 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。