【问题标题】:recode and target of assignment expands to non-language object [duplicate]重新编码和分配目标扩展到非语言对象[重复]
【发布时间】:2013-12-31 04:39:42
【问题描述】:

我正在尝试重新编码一个变量。

library(car)

没问题

 bd2011$diag = recode(bd2011$value, 
                 "'7400' <- 'dia1'; else = 'b'")

但是对于

bd2011$diag = recode(bd2011$value,
                 " c('7400','7401') <- 'dia1'; else = 'b'")  

会生成

 Error in c("7400", "7401") <- "dia1" : 
  target of assignment expands to non-language object

有什么问题?如何纠正?谢谢。

【问题讨论】:

    标签: r variable-assignment


    【解决方案1】:

    您不应该单引号 LHS 表达式(除非它们是字符值)并且您不应该使用 "&lt;-"。值对应该按以下方式传递:

    c(7,8,9)='high'
    

    对于单个向量到单个项目的分配,您可能已经摆脱了它,但是您正在尝试从一个项目到两个字符值的分配:

    c('7400','7401') <- 'dia1'
    

    recode 函数实际上是在另一个方向进行赋值,所以使用"&lt;-" 确实令人困惑并且语法不正确。

    您可以通过查看在“recode.list”上循环的代码来了解为什么会出现问题:

    for (term in recode.list) {
        if (0 < length(grep(":", term))) {...}
        else if (0 < length(grep("^else=", squeezeBlanks(term)))) { ...}
        else {...}
    

    注意:不考虑有人使用"&lt;-""-&gt;" 的可能性。

    那么这就是最后一个 else-consequent 中的内容(它会忽略“

            set <- eval(parse(text = strsplit(term, "=")[[1]][1]))
            target <- eval(parse(text = strsplit(term, "=")[[1]][2]))
            for (val in set) {
                if (is.na(val)) 
                  result[is.na(var)] <- target
                else result[var == val] <- target
    

    因此应该很容易看出 LHS 正在被评估并分配给来自 RHS 的“目标”。因此,如果有一个用于分配的方向,那就是"---&gt;"

    【讨论】:

    • 谢谢。我取消了报价,没有错误。但价值是 chr。 > str(bd2011)'data.frame':1523420 ob​​s。 6 个变量: $ data.yr : chr "2011" "2011" "2011" "2011" ... $ hospital.id : chr "0622" "0622" "0622" "0622" ... $ patient.ctrl .nu​​m : chr "1564036" "1564127" "1564182" "1564215" ... $ medical.health.rec.num: chr "007054047" "007054055" "007054059" "007054061" ... $ 变量:因子 w/ 19 个级别 "diagnosis1","diagnosis2",..: 1 1 1 1 1 1 1 1 1 1 ... $ value : chr "V3000" "V3000" "V3000" "V3000" ...
    • 那条评论毫无用处。请删除它并编辑您的 Q 以获得可复制示例的格式化材料。
    猜你喜欢
    • 1970-01-01
    • 2015-02-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-21
    • 2019-03-18
    • 2020-06-27
    相关资源
    最近更新 更多