r data.frame代码无法运行...有时候

时间:2016-01-25 14:27:00

标签: r dataframe

我有一个数据分析模块,我已经使用了一段时间。从所选模型的输出中,我可以使用data.frame来预测一系列感兴趣的值的结果。以下行应创建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),每个= 10),tlwma = rep(c(0,:     找不到对象'tod'

我做了一些搜索,但无法获得任何回报......甚至不确定如何正确搜索这样的问题。感谢您提供有关如何持续运行的任何建议。

A.Birdman

2 个答案:

答案 0 :(得分:1)

发生错误是因为我们尝试根据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)

答案 1 :(得分:0)

我认为只有当你执行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)