【问题标题】:Rbind throwing Error in NextMethod() : invalid valueRbind 在 NextMethod() 中抛出错误:无效值
【发布时间】:2013-04-29 22:14:41
【问题描述】:

我的数据框如下:

> t
     Day TestID VarID
1 2013-04-27  Total Total

> str(t)
'data.frame':   1 obs. of  3 variables:
 $ Day   : Date, format: "2013-04-27"
 $ TestID: factor [1, 1] Total
  ..- attr(*, "levels")= chr "Total"
 $ VarID : Factor w/ 3 levels "0|0","731|18503",..: 3

当我尝试执行 rbind 时,出现以下错误

> rbind(t,t)
Error in NextMethod() : invalid value

但是当我尝试直接重新创建数据框时,我没有收到该错误:

> t <- data.frame(Day = as.Date("2013-04-27"),TestID = "Total", VarID = "Total")
> t
     Day TestID VarID
1 2013-04-27  Total Total
> str(t)
'data.frame':   1 obs. of  3 variables:
 $ Day   : Date, format: "2013-04-27"
 $ TestID: Factor w/ 1 level "Total": 1
 $ VarID : Factor w/ 1 level "Total": 1
> rbind(t,t)
     Day TestID VarID
1 2013-04-27  Total Total
2 2013-04-27  Total Total

谁能帮我弄清楚发生了什么以及如何避免这个错误。 谢谢。

【问题讨论】:

  • 您能否提供dput()rbind 不起作用的数据框版本的输出?
  • 感谢您推荐 dput。我将来会使用它。目前这个问题已经解决。谢谢。

标签: r rbind


【解决方案1】:

我看到的主要区别是第一个版本中的TestID 变量是factor [1, 1](一个矩阵)而不是Factor(一个向量)

第一版:

t1 <- data.frame(Day = as.Date("2013-04-27"),
                 TestID = "Total", VarID = "Total")
rbind(t1,t1)

转换为第二个版本:

t2 <- t1
dim(t2$TestID) <- c(1,1)
str(t2$TestID)
##  factor [1, 1] Total
##  - attr(*, "levels")= chr "Total"
rbind(t2,t2)
## Error in NextMethod() : invalid value

修复损坏的版本:

t3 <- t2
t3$TestID <- drop(t3$TestID)
rbind(t3,t3)  ## works

【讨论】:

  • 谢谢,这解决了问题。我现在在 rbind 之前对两个数据帧应用 drop。仍然不清楚发生了什么?
  • 我们必须首先了解更多关于数据帧是如何构建的才能回答这个问题......一般来说数据帧不包含矩阵,但可以使用@987654327 构建它们@ (来自?data.frame:如果将列表或数据框或矩阵传递给“data.frame”,就好像每个组件或列已作为单独的参数传递(“模型矩阵”类的矩阵除外) ' 和那些受 'I' 保护的),或者通过手动将列表的 class 设置为 data.frame ...
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-01-25
  • 1970-01-01
  • 2018-03-01
  • 2019-12-10
  • 2018-01-09
  • 1970-01-01
相关资源
最近更新 更多