我正在尝试在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
时,我得到了同样的错误。
任何解决方案?
答案 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)");
。