Error: Cannot pass NA to dbQuoteIdentifier()
此外:警告信息:
In field_types[] <- field_types[names(data)] :
number of items to replace is not a multiple of replacement length
今天我尝试运行任何使用sqldf包的内容时,会收到这个错误消息。昨天可以正常运行的查询今天却无法运行,我做错了什么吗?
Error: Cannot pass NA to dbQuoteIdentifier()
此外:警告信息:
In field_types[] <- field_types[names(data)] :
number of items to replace is not a multiple of replacement length
今天我尝试运行任何使用sqldf包的内容时,会收到这个错误消息。昨天可以正常运行的查询今天却无法运行,我做错了什么吗?
我也遇到了同样的问题:
Error: Cannot pass NA to dbQuoteIdentifier()
In addition: Warning message:
In field_types[] <- field_types[names(data)] :
number of items to replace is not a multiple of replacement length
经过一些研究,我发现我在一张表中选择了同一列两次:
table1<- sqldf("select columnA,
columnA,
keyA
from tableA")
table2<- sqldf("select columnB,
keyB
from tableB")
problematicMerge<- sqldf("select a.*,
b.*
from tableA a join
tableB
on a.keyA = b.keyB")
这个问题可以通过修改table1表来移除重复列来解决(请参见以下代码:--我认为给其中一个列取别名也可以解决该问题):
table1<-sqldf("select columnA,
keyA
from tableA")
sqldf("select rok from d")
。数据框 d
本身看起来很正常,没有重复的列名,所以这让人非常困惑为什么会失败。但是数据框 d
本身是用一个具有重复列的查询创建的 - 所以数据框 d
本身必须处于某种不健康的内部状态,你无法看到它(看起来像任何正常的数据框)。这就是为什么这个问题如此奇怪的原因 :-) - Tomas我也遇到了同样的错误:
## step1: encountered the error as below while joining two tables
screens_temp_2 = sqldf("SELECT a.* , b.ue as 'sp_used_ue' , b.te as
'sp_used_te' from screens_temp a left outer join sp_temp b on
a.screen_name = b.screen_name ")
Error: Cannot pass NA to dbQuoteIdentifier()
In addition: Warning message:
In field_types[] <- field_types[names(data)] :
number of items to replace is not a multiple of replacement length
## step2: while checking the column names , this is what i found
colnames(screens_temp)
[1] "screen_name" "usv" "tsv" "20_ue" "20_te"
[6] "40_ue" "40_te" "60_ue" "60_te" "80_ue"
[11] "80_te" "100_ue" "100_te" "sp_load_ue" "sp_load_te"
[16] "sp_load_ue" "sp_load_te"
## below i corrected the column names:
colnames(screens_temp) <- c("screen_name", "usv", "tsv", "20_ue", "20_te", "40_ue" , "40_te" , "60_ue" , "60_te" , "80_ue" , "80_te" ,"100_ue" , "100_te" , "sp_load_ue" , "sp_load_te" , "sp_used_ue" , "sp_used_te" )
write.table(screens_temp, "screens_temp_corrected.csv", row.names = FALSE ,col.names = TRUE, sep = ",")
## again i ran step 1, it worked fine.
dbWriteTable
调用中将数据框写入数据库时,而不是读取数据时。即使没有sqldf也会发生这种情况。例如,如果library(RSQLite); dd <- data.frame(1,2); names(dd) <- c("a", "a"); con <- dbConnect(SQLite()); dbWriteTable(con, "dd", dd)
出现错误,而sqldf("select demand, demand from BOD")
则不会。如果使用RH2后端,它将报告重复列作为错误,并标识重复的列名。 - G. Grothendieck昨天我遇到了同样的问题,当我突然无法将一个表从R上传到我的远程桌面上的SQLite数据库。
lghdb <- dbConnect(SQLite(), 'lgh.db'
dbWriteTable(lghdb, 'SrtrRisks', SrtrRisks)
Error: Cannot pass NA to dbQuoteIdentifier()...
在循环内部使用sqldf时遇到了相同的问题。通过将其放入data.frame调用中解决了这个问题:data.frame(sqldf(..))。