r 数据帧代码无法运行.有时



我有一个数据分析模块,我已经使用了一段时间。从所选模型的输出中,我可以使用 data.frame 来预测一系列感兴趣值的结果。以下行应创建一个数据帧。有时它会运行,但有时列"tod"无法创建,并触发错误。

todData <- data.frame(kpsp=rep(c(0,1,0), each=10), tlwma=rep(c(0,0,1), each=10), tod=rep(seq(-0.25,4.25, by=.5),3), tod2=tod^2, doy=36)

这将产生以下返回:

data.frame(kpsp = rep(c(0, 1, 0), each = 10), tlwma = rep(c(0, : 未找到对象"Tod"

我做了一些搜索,但没有得到任何回报...甚至不确定如何正确搜索这样的问题。感谢您对如何使其始终如一地运行的任何建议。

A.鸟人

发生此错误的原因是我们尝试基于在data.frame调用中创建的列创建新列。 创建data.frame对象后,可以访问data.frame中的变量。 我们可以使用 data.frame 调用来创建初始列,然后使用 mutate(从 dplyr )或withintransform(从 base R )创建依赖于初始列的新列。

todData <- data.frame(kpsp=rep(c(0,1,0), each=10), 
      tlwma=rep(c(0,0,1), each=10), tod=rep(seq(-0.25,4.25, by=.5),3),
      doy = 36)
todData <- within(todData, {tod2 <- tod^2})   

todData <- transform(todData, tod2 = tod^2)

我认为它只有在您之前某处执行 tod=rep(seq(-0.25,4.25, by=.5),3) 作为独立行时才有效。这将起作用:

tod=rep(seq(-0.25,4.25, by=.5),3)
todData <- data.frame(kpsp=rep(c(0,1,0), each=10), tlwma=rep(c(0,0,1), each=10), tod=tod, tod2=tod^2, doy=36)

或者,如果您真的想用一行多次执行此操作,请使用具有 tod2 默认公式的函数(除非需要,否则您不会在调用中提及 tod2):

create.toData <- function(kpsp,tlwma,tod,tod2=tod^2,doy){
  data.frame(kpsp=kpsp, tlwma=tlwma, tod=tod, tod2=tod2,doy=doy)
}
todData <- create.toData(kpsp=rep(c(0,1,0), each=10), tlwma=rep(c(0,0,1), each=10), tod=rep(seq(-0.25,4.25, by=.5),3), doy=36)

最新更新