二元运算符的非数字参数

 孝敏敏__216 发布于 2023-01-29 13:40

我正在尝试在R中创建我的第一个函数.函数应该包含数据帧,数据帧中的x系列,数据帧中的y系列,以及绘制散点图.看起来很简单,但是当我尝试检查可选的布尔参数时遇到了麻烦.

R脚本

plotScatterChart <- function(data,x,y,scale=y,line=FALSE) {

    require(ggplot2)
    data$x <- as.numeric(x)
    data$y <- as.numeric(y)

    plot <- ggplot(data, aes(x, y)) + 
            geom_point() +  # aes(alpha=0.3,color=scale)
            #scale_color_gradient(high="red")

    if(line) {
        plot <- plot + geom_smooth(method="lm") 
    }

    ggsave(file="plot.svg", plot=plot, height=10, width=10)

    return(plot)
}

plotScatterChart(data=iris,x=iris$Petal.Length,y=iris$Petal.Width,line=TRUE)

错误

non-numeric argument to binary operator

额外

欢迎提出改进此功能的其他建议.

3 个回答
  • 在2.0.0版本中,ggplot2获得了一个新的几何体,geom_blank()它几乎没有任何吸引力.

    当它被放置为最后一层时,它可用于避免这种类型的错误.

    plot <- ggplot(data, aes(x, y)) +
      geom_point() +
      #aes(alpha=0.3,color=scale) +
      #scale_color_gradient(high="red") +
      geom_blank()
    

    使用geom_blank()这种方式类似于变通办法@ krlmlr的答案,它使用list()的最后一层.

    2023-01-29 13:42 回答
  • 克里斯托弗的回答是完全正确的.让我补充说,ggplot似乎也接受列表:

    plot <- ggplot(data, aes(x, y)) +
      list(
        geom_point(),
        aes(alpha=0.3,color=scale),
        scale_color_gradient(high="red"),
        NULL
      )
    

    不幸的是,与你可以编写的Python不同[1, 2, 3, ],这个结构list(1, 2, 3, )在R中产生了一个错误.这就是结果的原因NULL,我很高兴被忽略了ggplot2.

    另一种可能的解决方法是编写

    plot <- ggplot(data, aes(x, y)) +
      geom_point() +
      #aes(alpha=0.3,color=scale) +
      #scale_color_gradient(high="red") +
      list()
    

    决赛list()应该留在原地以取消最后一个+星座的影响; 否则就是无操作.

    2023-01-29 13:42 回答
  • 这个错误是因为尾部的+geom_point().删除它,它应该工作.

    2023-01-29 13:42 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有