【问题标题】:r: sym() function failing [can't convert string to symbol]r: sym() 函数失败 [无法将字符串转换为符号]
【发布时间】:2019-11-16 18:28:24
【问题描述】:

我有一个包含 10 多个分类变量和大约 20 个数值变量的数据集。我正在尝试编辑 github 上可用的 Stef van Buuren 的 mice.impute.logreg 函数,以调用 glm.fit(),但使用更高的 maxit 值来尝试达到收敛。但是,按原样运行代码时,出现以下错误:

Error: Only strings can be converted to symbols

它来自代码中的这一行:

 rv <- t(chol(sym(fit.sum$cov.unscaled)))

我继续打印出fit.sum$cov.unscaled 的内容,得到了一个巨大的协方差矩阵(?),其中包含所有变量(分类变量有点单热编码(?)),类似这样,但更大:

              Proteinuria22 Proteinuria23 Proteinuria24 Proteinuria25      Aetiol22      Aetiol23      Aetiol24
              -0.0775687218  6.603074e-02  6.995692e-01 -1.0462947407 -1.990400e-01 -3.756997e+01 -6.198267e-01
Weight2       -0.0003022753  6.802872e-04 -1.138967e-03 -0.0043737786  2.550278e-04  3.380858e-02  6.343819e-04
Height2        0.0174235854 -8.945169e-02 -2.588742e-01  0.2947104430 -1.763788e-01  2.027542e+00 -3.676413e-02
BMI22          0.0038176385 -2.246294e-02  3.529623e-02  0.0507158023 -1.959203e-03  1.515110e+00  3.618223e-02
BMI23          0.0463573025  4.600740e-02  1.210799e-01  0.1009359117  6.368376e-03  7.268413e-01 -4.677462e-03
BMI24          0.0230542190  4.822956e-02  1.424563e-01  0.2136974371 -7.688207e-02 -4.099045e+00 -4.920604e-02
Proteinuria21  0.2564365948  2.399999e-01  2.869407e-01  0.2866854741 -3.345524e-02  7.021764e+00 -1.380307e-02
Proteinuria22  0.5114421153  2.658057e-01  2.444392e-01  0.2575295706 -5.555202e-02  2.132465e+00 -2.367527e-02
Proteinuria23  0.2658056994  8.278569e-01  2.805812e-01  0.1743841777 -5.433797e-02 -5.289189e+00 -1.905688e-02
Proteinuria24  0.2444391680  2.805812e-01  5.436426e-01  0.2272864202 -4.551615e-02  2.533664e+00 -1.962130e-02
Proteinuria25  0.2575295706  1.743842e-01  2.272864e-01  1.1656567100 -7.355628e-02  9.412580e+00 -1.330318e-01
Aetiol22      -0.0555520221 -5.433797e-02 -4.551615e-02 -0.0735562813  4.327236e-01  4.698377e+00  1.196196e-01
Aetiol23       2.1324651321 -5.289189e+00  2.533664e+00  9.4125804535  4.698377e+00  1.175992e+04  2.984111e+00

由于我对r还不是很熟悉,我真的不知道这是什么意思……我知道sym()是用来将字符串转换为符号的,但我不明白如何(或为什么)如此巨大的矩阵将被转换为符号。请问有什么想法吗?

【问题讨论】:

  • 我认为您需要将列名字符串转换为sym。不清楚为什么你需要sym 这里
  • 谢谢,@akrun,但你能不能详细点?我真的不明白你的意思。
  • 我的意思是 sym("cov.unscaled") 然后在 tidyverse 环境中评估 (!!)
  • 好的...但它实际上是fit.sum$cov.unscaled,当我尝试做sym("fit.sum$cov.unscaled")时,(假设这是一个列名...?)我得到另一个错误:@987654337 @。我相信这是来自周围的chol 函数...
  • @akrun 哦,谢谢。现在,当我查看 chol 函数时,我明白了你的意思。我刚刚删除了sym 函数,并且代码有效。我不知道为什么它首先被放在代码中......

标签: r missing-data imputation r-mice


【解决方案1】:

感谢@arun评论中的指针,我发现我只需要删除sym()函数,因为使用了周围的cholfunction

计算实对称正定方阵的 Choleski 分解。

我还没有弄清楚为什么代码作者首先将sym() 函数放在那里,因为代码显然与它不符,但没有它也能正常工作。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-02
    相关资源
    最近更新 更多