R:在if语句中创建一个数据框

时间:2018-01-16 21:46:29

标签: r dataframe

我正在尝试在if语句中创建数据框,但是当我在else范围内使用此数据框时,我收到以下错误:

  

错误:$运算符对原子矢量无效

以下是我的代码的一部分:

for(i in 1:numOfTrays){
if (i == 1){
  parameters <- c(Qin=Qin,A=A)
  state <- c(h=h0)
  time <- seq(0,200,by=1)
  out <- ode(y= state, func = FluidH, parms = parameters, times = time)
  Qout <- cbind(out[,1],VFRoutput((out[,2])))
  colnames(Qout)<-c("time","Qout")
  Qin <- as.data.frame(Qout)
  #write.csv(Qin,"Qin")
}
else{

  for (j in 1:length(Qin$Qout)){
    h <- h0 + ((Qin$Qout[j]-VFRoutput(h0))/A)*Qin$time[j]

我尝试使用Qin运算符设置<<-全局,但当我尝试从Qin$Qout语句中打印if时,我得到了同样的错误。

任何解决方案?

1 个答案:

答案 0 :(得分:0)

虽然您的示例不可重现,但我冒昧地猜测if语句之前存在Qout <- matrix(NA, nrow = 3, ncol = 3) chk <- TRUE if (chk) { out <- as.data.frame(Qout) } else { Qout$col1 } Qout <- matrix(NA, nrow = 3, ncol = 3) chk <- FALSE if (chk) { out <- as.data.frame(Qout) } else { Qout$col1 } Error in Qout$col1 : $ operator is invalid for atomic vectors 作为矩阵或某种类型(可能没有列名)。这是一个可重复的例子:

else

因此,您需要确保在$语句中处理支持data.frame子集化的对象 - 例如QSqlDatabase db; db = QSqlDatabase::addDatabase("QSQLITE", "db"); db.setDatabaseName(directory + QDir::separator() + "db.sqlite3"); db.open(); QSqlQuery query(db); query.exec("create table mytable (id integer)");