我有一个数据分析模块,我已经使用了一段时间。从所选模型的输出中,我可以使用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
答案 0 :(得分:1)
发生错误是因为我们尝试根据data.frame
调用中创建的列创建新列。创建data.frame
对象后,可以访问data.frame
中的变量。我们可以使用data.frame
调用来创建初始列,然后使用mutate
(来自dplyr
)或within
或transform
(来自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)