R sqldf - match.fun(asfn) 'c("as.labelled", "as.integer")' 不是函数、字符或符号

R sqldf - match.fun(asfn) 'c("as.labelled", "as.integer")' is not a function, character or symbol

R 的新手,刚刚玩了几个小时,我想我会玩一些 NHANES 数据集,例如ftp://ftp.cdc.gov/pub/Health_Statistics/NCHS/nhanes/2003-2004/

所以抓住了几个,在玩了 merge(bmx_c, demo_c) 和快速 Google 之后,我认为 sqldf 库将是合并/提取几列的更有效方法从文件中取出来玩,但我遇到了问题。

Error in match.fun(asfn) : 
  'c("as.labelled", "as.integer")' is not a function, character or symbol**

NHANES 文件是 SAS 格式,所以我必须:

install.packages("Hmisc")
install.packages("sqldf")

library(Hmisc)
library(sqldf)

demo_c <- sasxport.get("DEMO_C.XPT")
bmx_c <- sasxport.get("BMX_C.XPT")

is.data.frame(demo_c)
[1] TRUE

sqldf("select seqn from demo_c")
Error in match.fun(asfn) : 
  'c("as.labelled", "as.integer")' is not a function, character or symbol
>  

summary(demo_c$seqn)
   Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
  21000   23540   26070   26070   28600   31130 
> 

我猜想需要进行某种类型转换,但我不知道 R 的精妙之处。

sqldf 不支持 Hmisc 生成的 "labelled" 列 class。所有列似乎都是整数或数字,因此首先将列转换为数字:

demo_c[] <- lapply(demo_c, as.numeric)
sqldf("select seqn from demo_c")

如果您愿意,可以将整数转换为整数:

isInt <- sapply(demo_c, inherits, "integer")
demo_c[isInt] <- lapply(demo_c[isInt], as.integer)    
demo_c[!isInt] <- lapply(demo_c[!isInt], as.numeric)