【问题标题】:r data.frame code fails to run... sometimesr data.frame 代码无法运行...有时
【发布时间】:2016-01-25 22:47:58
【问题描述】:

我有一个已经使用了一段时间的数据分析模块。从选定模型的输出中,我可以使用 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), each = 10), tlwma = rep(c(0, : 找不到对象“tod”

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

A.鸟人

【问题讨论】:

    标签: r dataframe


    【解决方案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)
    

    【讨论】:

      【解决方案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)
      

      【讨论】:

        猜你喜欢
        • 2018-03-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-05-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多