Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R中相同长度向量的函数_R_List_Function_For Loop_Vector - Fatal编程技术网

R中相同长度向量的函数

R中相同长度向量的函数,r,list,function,for-loop,vector,R,List,Function,For Loop,Vector,我想做一个函数,它应该将不同长度的向量列表重新生成相同长度的向量列表。我做了两个函数,但第二个不太好用。 我的代码是: 第一个功能(运行良好) delka假设您一次可以处理整个列表,如果您想用NAs填充较短的向量,这里有一种方法 my <- list(a = runif(5), b = runif(11), c = runif(7)) maxl <- max(sapply(my, length)) sapply(my, FUN = fu

我想做一个函数,它应该将不同长度的向量列表重新生成相同长度的向量列表。我做了两个函数,但第二个不太好用。 我的代码是: 第一个功能(运行良好)


delka假设您一次可以处理整个列表,如果您想用NAs填充较短的向量,这里有一种方法

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

my假设@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
## 

lapply(my,`lengthI)我不了解所需的行为。如果列表中的向量长度不同,那么
vector()中较短的向量会发生什么情况?(是否应该用0填充额外的空格?使用NAs?)
第一个参数
mode
应该是一个字符串,用于指定向量的模式。请参见
?vector
向量中的内容,零或NAs并不重要。我可以很容易地将NAs替换为零,反之亦然。我的目标是找出我做错了什么。我将尝试了解有关向量模式参数的更多信息。Thx用于回复。Thx对于伟大的解决方案,但它并没有回答我的问题。你是如此伟大,因为你花了时间写了这个答案,但我真的在寻找我在代码中做错了什么。我的目标不仅仅是解决这个问题,我还有另一个问题,所以我想找到我做错了什么,以便更好地学习。你知道我做错了什么吗?但有一次再次重申,thx代表repply。thx代表伟大的解决方案,但它不能回答我的问题。你是如此伟大,因为你花了时间写了这个答案,但我真的在寻找我在代码中的错误。我的目标不仅仅是解决这个问题,我还有另一个问题,所以我想找出我做错了什么,以便更好地学习。你有id吗ea我错了什么?但再一次,真的谢谢你的重覆。@Bobesh那么你的问题属于代码审查。
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
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
##