代码之家  ›  专栏  ›  技术社区  ›  wondim

使用CSV数据进行计算,同时使用公式字符串中的列名

r
  •  0
  • wondim  · 技术社区  · 7 年前

    正在尝试使用下面的表达式计算整个csv数据。但是csv列无法识别,即使我使用了 row.names=1 as.formula(expr) .

    expr <- "(((Blue_482/Green_557)/(RedEdge_717/Blue_482)) *((NIR_831/RedEdge_717)/(Green_557/Red_667)))"
    
    csv <- read.csv(file=input_csv, header=TRUE, sep=",", row.names=1)
    pre <- as.formula(expr)
    #with(data, glm(as.formula(expr)) )
    fit <- rpart(lm(pre), method="class",data=csv)
    

    我的数据如下。

        SPM,Blue_482,Green_557,Red_667,RedEdge_717,NIR_831
        36,0.010417017,0.01488165,0.014811581,0.012048874,0.005534498
        36,0.009935392,0.014388976,0.014254432,0.011446002,0.005325746
    

    我得到以下错误。

    Error in eval(parse(text = x, keep.source = FALSE)[[1L]]) : 
    object 'Blue_482' not found
    
    0 回复  |  直到 7 年前
        1
  •  0
  •   wondim    7 年前

    那个 csv 对象变量名应该在每列前面。因此,下面的代码是有效的。

    expr <- "(((csv$Blue_482/csv$Green_557)/(csv$RedEdge_717/csv$Blue_482)) *((csv$NIR_831/csv$RedEdge_717)/(csv$Green_557/csv$Red_667)))"
    csv <- read.csv(file=input_csv, header=TRUE, sep=",", row.names=NULL)
    calculated <- (eval(parse(text = expr)))