【问题标题】:Error in R - Number of columns of result is not a multiple of vector length (arg 1)R 中的错​​误 - 结果的列数不是向量长度的倍数(arg 1)
【发布时间】:2020-05-29 06:18:42
【问题描述】:

当我尝试在 R 中运行此代码时收到此错误

const1 = c(1,1,1,1,1)
const2 = c(1,1,1,1,1)
const3 = c(1,1,1,1,1)
const4 = c(1,1,1,1,1)
const5 = c(1,1,1,1,1)
const6 = c(1,1,1,1,1)
const7 = c(35,16,125,25,40,5)
const8 = c(37,17,130,27,43,7)
const9 = c(39,18,136,29,46,8)
const10 = c(42,19,139,30,50,10)
const11 = c(45,20,144,33,52,11)
f.con <- rbind(const1,const2,const3,const4,const5,const6,const7,const8,const9,const10,const11)

警告信息:在 rbind(const1, const2, const3, const4, const5, const6, const7,
结果的列数不是向量长度的倍数(arg 1)

【问题讨论】:

  • 有些向量有5个和6个元素

标签: r linear-programming


【解决方案1】:

我们可以将所有向量放入list,然后用map 转换为data.frame 并将它们绑定到一个数据集中

library(purrr)
map_dfr(mget(ls(pattern = '^const\\d+$')), ~ as.data.frame(t(.x)))

或者unnest_wider

library(tidyr)
mget(paste0('const', 1:11)) %>%
      tibble(col1 = .) %>% 
      unnest_wider(c(col1))

或使用base R,在创建vectors 的list 后,在末尾填充NA 以获得较短的列表元素,然后是rbind

lst1 <- mget(paste0('const', 1:11))
do.call(rbind, unname(lapply(lst1, `length<-`, max(lengths(lst1)))))
#        [,1] [,2] [,3] [,4] [,5] [,6]
# [1,]    1    1    1    1    1   NA
# [2,]    1    1    1    1    1   NA
# [3,]    1    1    1    1    1   NA
# [4,]    1    1    1    1    1   NA
# [5,]    1    1    1    1    1   NA
# [6,]    1    1    1    1    1   NA
# [7,]   35   16  125   25   40    5
# [8,]   37   17  130   27   43    7
# [9,]   39   18  136   29   46    8
#[10,]   42   19  139   30   50   10
#[11,]   45   20  144   33   52   11

【讨论】:

    【解决方案2】:

    您可以获取列表中的所有向量并使用sapply 从每个向量中提取数据。

    data <- mget(paste0('const', 1:11))
    t(sapply(data, `[`, 1:max(lengths(data))))
    
    #        [,1] [,2] [,3] [,4] [,5] [,6]
    #const1     1    1    1    1    1   NA
    #const2     1    1    1    1    1   NA
    #const3     1    1    1    1    1   NA
    #const4     1    1    1    1    1   NA
    #const5     1    1    1    1    1   NA
    #const6     1    1    1    1    1   NA
    #const7    35   16  125   25   40    5
    #const8    37   17  130   27   43    7
    #const9    39   18  136   29   46    8
    #const10   42   19  139   30   50   10
    #const11   45   20  144   33   52   11
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-11-08
      • 2018-01-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多