RMySQL安装:$operator对于原子向量无效



考虑下面的场景。在R2.14.0 中添加包"RMySQL"

> install.packages('RMySQL',type='source')

* installing *source* package 'RMySQL' ...
** package 'RMySQL' successfully unpacked and MD5 sums checked
**checking for $MYSQL_HOME... C:/wampp/mysql/**
gcc  -I"G:/PROGRA~1/R/R-214~1.0/include" -I"C:/wampp/mysql/"/include    -I"d:/RCompile/CRANpkg/extralibs/local/include"     -O3 -Wall  -std=gnu99 -mtune=core2 -c RS-DBI.c -o RS-DBI.o
gcc  -I"G:/PROGRA~1/R/R-214~1.0/include" -I"C:/wampp/mysql/"/include    -I"d:/RCompile/CRANpkg/extralibs/local/include"     -O3 -Wall  -std=gnu99 -mtune=core2 -c RS-MySQL.c -o RS-MySQL.o
gcc -shared -s -static-libgcc -o RMySQL.dll tmp.def RS-DBI.o RS-MySQL.o -Ld:/RCompile/CRANpkg/extralibs/local/lib C:/wampp/mysql//lib/opt/libmysql.lib -LG:/PROGRA~1/R/R-214~1.0/bin/i386 -lR
installing to G:/Program Files/R/R-2.14.0/library/RMySQL/libs/i386
** R
** inst
** preparing package for lazy loading
Creating a generic function for 'format' from package 'base' in package 'RMySQL'
Creating a generic function for 'print' from package 'base' in package 'RMySQL'
** help
*** installing help indices
** building package indices ...
** testing if installed package can be loaded
Error : .onLoad failed in loadNamespace() for 'RMySQL', details:
  call: i$Location
  error: $ operator is invalid for atomic vectors
Error: loading failed
Execution halted
ERROR: loading failed
* removing 'G:/Program Files/R/R-2.14.0/library/RMySQL'

对安装失败有什么想法或解释吗?平台详细信息:

  1. Win XP
  2. 2014年2月
  3. RMySQL_0.9-3.tar.gz
  4. MySQL来自最新的examplep安装,在MySQL_home下的相应目录中有lib和头文件目录

最新版本MySQL的注册表的性质与包中的代码不匹配。

在tar.gz文件中,有一个R文件"\RMySQL_0.9-3.tar\RMySQL\R\zzz.R",其中包含以下代码:

# check registry
if (!dir.exists(mysql)) {
    reg <- utils::readRegistry("SOFTWARE\MySQL AB", hive="HLM", maxdepth=2)
    for (i in reg){
    mysql <- i$Location
    if (dir.exists(mysql)) {
        if (verbose) cat(mysql, "found in registryn")
        break
    }
    }
}

过去的情况是,"reg"的每个元素都是一个列表,但第一个元素现在是一个向量。这意味着"mysql<-i$Location"语句将失败,从而创建您观察到的错误消息。

我修改了语句,通过更改行跳过注册表的第一个元素

for (i in reg){

for (i in reg[-1]){

并通过在本地修改的tarball上运行install.packages进行安装。

最新更新