ggplot2 在函数或 S4 中使用时产生错误

2024-02-09

当在 function 或 S4 中使用 ggplot2 时,我遇到了困难。这是我的没有功能的代码:

rm(list=ls(all=TRUE))
library(nlme)
data(Oats)
Data <- Oats

Data$Env <- factor(Data$Block)
Data$Gen  <- factor(Data$Variety)

Data$Gen <- factor(Data$Gen)
Data$Env <- factor(Data$Env)
Gen.No <- length(levels(Data$Gen))
Env.No <- length(levels(Data$Env))
Min.G.E <- min(Gen.No, Env.No)

GGE.ANOVA <- aov(yield ~ Env + Env:Gen, data = Data)
GGE.Effs <- model.tables(GGE.ANOVA, type = "effects", cterms = "Env:Gen")$tables$"Env:Gen"
SVD <- svd(GGE.Effs)
D <- diag(SVD$d[1:Min.G.E])
E <- SVD$u%*%sqrt(D)
G <- SVD$v%*%sqrt(D)
Ecolnumb <- c(1:Min.G.E)
Ecolnames <- paste("PC", Ecolnumb, sep="")
dimnames(E) <- list(levels(Data$Env), Ecolnames)
dimnames(G) <- list(levels(Data$Gen), Ecolnames)
SVD.Values <- SVD$d
PC.No <- c(1:length(SVD.Values))
PC.SS <- SVD.Values^2
PC.Percent.SS <- PC.SS/sum(PC.SS)*100

library(grDevices)
con.hull.pos <- chull(G)
con.hull <- rbind(G[con.hull.pos, ], G[con.hull.pos[1], ])

getPerpPoints <- function(mat) {
x <- mat[,1]
y <- mat[,2]
out <- matrix(0, nrow = 2, ncol = 2)
if(diff(x) == 0) {
xnew <- x[1]
  }
  else {
xnew <- (diff(y) / diff(x)) * x[1] - y[1]
xnew <- xnew / (diff(y) / diff(x) + diff(x) / diff(y))
  }
  ynew <- -(diff(x) / diff(y)) * xnew
  out[2,] <- c(xnew, ynew)
  return(out = out)
    }
tmp <- t(sapply(1:(nrow(con.hull)-1),
     function(i) getPerpPoints(con.hull[i:(i+1),])[2, ]))
tmp <- as.data.frame(tmp)


library(ggplot2)
r <- 0.08
p <- ggplot(data = as.data.frame(G), aes(PC1, PC2)) + geom_point() + theme_bw()
p <- p + geom_text(aes(label = row.names(G)), size = 3, vjust = 1.25, colour = "black")
p <- p + geom_path(data = as.data.frame(con.hull), aes(PC1, PC2))
p <- p + geom_segment(data = as.data.frame(E), aes(xend = PC1, yend = PC2), x = 0, y = 0,
                  colour = "black", arrow = arrow(angle = 25, length = unit(0.25, "cm")))
p <- p + geom_text(data = as.data.frame(E), aes(label = row.names(E)),
               size = 3, vjust = 1.35, colour = "black")
p <- p + labs(list(x = sprintf("PC1 (%.1f%%)", PC.Percent.SS[1]),
               y = sprintf("PC2 (%.1f%%)", PC.Percent.SS[2])))
p <- p  + opts(axis.title.x = theme_text(size = 10, hjust = 0.54, vjust = 0))
p <- p  + opts(axis.title.y = theme_text(size = 10, angle = 90,  vjust = 0.25))
p <- p + xlim(range(c(E[ ,1], G[ ,1])) + range(c(E[ ,1], G[ ,1]))*r)
p <- p + ylim(range(c(E[ ,2], G[ ,2])) + range(c(E[ ,2], G[ ,2]))*r)
p <- p + geom_segment(data = as.data.frame(tmp), aes(xend = tmp$V1, yend = tmp$V2), x = 0, y = 0)
print(p)

and the output is enter image description here

但是当我在以下函数中使用相同的代码时,出现错误

rm(list=ls(all=TRUE))
PlotGGE <- function(Response, Env, Gen, Data) {

Data$Env <- factor(Data$Env)
Data$Gen  <- factor(Data$Gen)
Gen.No <- length(levels(Data$Gen))
Env.No <- length(levels(Data$Env))
Min.G.E <- min(Gen.No, Env.No)

GGE.ANOVA <- aov(yield ~ Env + Env:Gen, data = Data)
GGE.Effs <- model.tables(GGE.ANOVA, type = "effects", cterms = "Env:Gen")$tables$"Env:Gen"
SVD <- svd(GGE.Effs)
D <- diag(SVD$d[1:Min.G.E])
E <- SVD$u%*%sqrt(D)
G <- SVD$v%*%sqrt(D)
Ecolnumb <- c(1:Min.G.E)
Ecolnames <- paste("PC", Ecolnumb, sep="")
dimnames(E) <- list(levels(Data$Env), Ecolnames)
dimnames(G) <- list(levels(Data$Gen), Ecolnames)
SVD.Values <- SVD$d
PC.No <- c(1:length(SVD.Values))
PC.SS <- SVD.Values^2
PC.Percent.SS <- PC.SS/sum(PC.SS)*100

library(grDevices)
con.hull.pos <- chull(G)
con.hull <- rbind(G[con.hull.pos, ], G[con.hull.pos[1], ])

getPerpPoints <- function(mat) {
x <- mat[,1]
y <- mat[,2]
out <- matrix(0, nrow = 2, ncol = 2)
if(diff(x) == 0) {
xnew <- x[1]
  }
  else {
xnew <- (diff(y) / diff(x)) * x[1] - y[1]
xnew <- xnew / (diff(y) / diff(x) + diff(x) / diff(y))
  }
  ynew <- -(diff(x) / diff(y)) * xnew
  out[2,] <- c(xnew, ynew)
  return(out = out)
    }
tmp <- t(sapply(1:(nrow(con.hull)-1),
     function(i) getPerpPoints(con.hull[i:(i+1),])[2, ]))
tmp <- as.data.frame(tmp)


library(ggplot2)
r <- 0.08
p <- ggplot(data = as.data.frame(G), aes(PC1, PC2)) + geom_point() + theme_bw()
p <- p + geom_text(aes(label = row.names(G)), size = 3, vjust = 1.25, colour = "black")
p <- p + geom_path(data = as.data.frame(con.hull), aes(PC1, PC2))
p <- p + geom_segment(data = as.data.frame(E), aes(xend = PC1, yend = PC2), x = 0, y = 0,
                  colour = "black", arrow = arrow(angle = 25, length = unit(0.25, "cm")))
p <- p + geom_text(data = as.data.frame(E), aes(label = row.names(E)),
               size = 3, vjust = 1.35, colour = "black")
p <- p + labs(list(x = sprintf("PC1 (%.1f%%)", PC.Percent.SS[1]),
               y = sprintf("PC2 (%.1f%%)", PC.Percent.SS[2])))
p <- p  + opts(axis.title.x = theme_text(size = 10, hjust = 0.54, vjust = 0))
p <- p  + opts(axis.title.y = theme_text(size = 10, angle = 90,  vjust = 0.25))
p <- p + xlim(range(c(E[ ,1], G[ ,1])) + range(c(E[ ,1], G[ ,1]))*r)
p <- p + ylim(range(c(E[ ,2], G[ ,2])) + range(c(E[ ,2], G[ ,2]))*r)
p <- p + geom_segment(data = as.data.frame(tmp), aes(xend = tmp$V1, yend = tmp$V2), x = 0, y = 0)
print(p)
}

library(nlme)
data(Oats)

EDIT

Oats$Env <- factor(Oats$Block)
Oats$Gen <- factor(Oats$Variety)
PlotGGE(Response = yield, Env = Env, Gen = Gen, Data = Oats)

错误是

Error in row.names(G) : object 'G' not found

任何帮助和/或评论将不胜感激。提前致谢。


与原始版本相比,您在函数中的版本在开头缺少以下两行:

Data$Env <- factor(Data$Block)
Data$Gen  <- factor(Data$Variety)

您是否尝试过使用debug()单步调试函数来查找错误源?

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

ggplot2 在函数或 S4 中使用时产生错误 的相关文章

随机推荐

  • 自定义 spring-initializr 的工作方式?

    作为一家企业 我们希望在我们的 PCF 实例上内部托管initializr 我可以做到 我还可以修改 application yml 以默认某些选择 我通过简单地创建自己的 spring boot 应用程序来做到这一点 该应用程序使用 io
  • R 正在使用 mingw_32 编译 64 位架构的包

    定期 我想每当我更新 R 我在 64 位 Windows 机器上从源代码安装软件包时都会遇到问题 今天我尝试使用安装包devtools install github 在我的笔记本电脑上安装进行得很好 但在我的台式机上安装失败 可以将软件包安
  • 参数顺序评估

    在标准的早期版本 C 03 中 函数调用的参数求值顺序未指定 标准的后续版本 C 11 或 C 14 是否对此进行了更改 即我们是否可以依赖特定的顺序 从左到右 不 这没有改变 但最近有一个建议来改变这一点 N4228 细化表达式评估顺序
  • mingw 中的套接字编程

    我编写了服务器 客户端 C 代码并在 Visual Studio 中进行了测试 一切正常 但我想转换为 CodeBlocks MinGW Gnu CC Compiler 并且它返回一些错误 例如 warning 忽略 pragma 注释 W
  • 油藏取样

    检索k我们使用一种称为水库采样的技术从不确定大小的数组中获取随机数 有人可以用示例代码简要介绍一下它是如何发生的吗 我实际上没有意识到这个有一个名字 所以我从头开始证明并实现了这个 def random subset iterator K
  • maven-cobertura-plugin 不显示来源[关闭]

    这个问题不太可能对任何未来的访客有帮助 它只与一个较小的地理区域 一个特定的时间点或一个非常狭窄的情况相关 通常不适用于全世界的互联网受众 为了帮助使这个问题更广泛地适用 访问帮助中心 help reopen questions 当我通过运
  • $http 请求中的 AngularJS + Jasmine + JWT 令牌

    我正在尝试使用与 JWT 身份验证令牌一起使用的 API 构建一些测试 但我尝试测试的工厂使用 resouce 需要配置为JWT Token 在应用程序中我将其配置为 config 但在Jasmine我不知道应该怎样 因为茉莉花跑了befo
  • 为什么多边形 GeoJSON 对象的坐标存储在数组的数组中?

    正如在官方文档 http docs mongodb com manual reference geojson polygon 多边形GeoJSON对象的结构如下所示 db someCollection insert type Polygon
  • 如何避免短路评估

    我正在使用 Ruby on Rails 并希望验证两种不同的模型 if model1 valid model2 valid end 但是 运算符使用短路求值 即 仅当 model1 valid 为 true 时才求值 model2 vali
  • 创建一个带有空 src 的 iframe,这是“#”的符合标准的替代方案

    我的页面上有一个 iframe 我最初需要为其提供一个空白的 src 因为我最终使用 javascript 设置了 src 我一直在使用 Safari 和 Chrome 但遇到了一个问题 即在 iframe 中加载我的页面的重复副本 我在另
  • 滚动经过另一个 div 后,让 div 粘在页面顶部吗?

    div div div div div div div div
  • VB.NET 使用 WebRequest 检查 URI 是否有效

    寻找最佳方法来确定 VB NET 中是否存在 URI 而无需下载实际内容 System IO FileExists My Computer FileSystem FileExists可以在本地使用来确定文件是否存在 是否有适用于 Web 的
  • 我可以在迭代 C++ 容器时修改它的值吗?

    假设我有一个vector
  • Windows 上路径分隔符不明确 - 如何处理?

    另一个问题 https stackoverflow com questions 29623328 why is file pathseparatorchar a semicolon on windows提出了一个有趣的问题 在 Window
  • 获取图表js条形图来填充窗口

    我有一个chart js在画布内绘制的条形图
  • ASP.NET MVC 2 重新加载页面而不刷新并保持 URL 变化

    我正在使用 ASP NET MVC 创建一个项目 我想在占位符中显示页面内容而不刷新页面 类似于 ajax 但随着 URL 的变化 我怎样才能完成这个 谢谢你的回复 如果您更改浏览器的 url 这将自动执行重定向并刷新整个页面 您可以使用井
  • Page.IsValid 和 args.IsValid 之间有什么关系

    Page IsValid 和 args IsValid 是否相互依赖 我的意思是 如果 args IsValid true 则 Page IsValid 必须为 true 当然 反之亦然 如果 Page IsValid true 那么 ar
  • 尾随零不会进入数据库

    所以这是我的问题 我们试图将定价放入我们的数据库中 但由于某种原因 它将 10 00 转换为 10 或 10 50 转换为 10 5 它保持它只是砍掉尾随零 我检查了 SQL 语句 它说价格 10 00 所以我真的很困惑为什么 在哪里它要剥
  • 黄瓜嵌入的屏幕截图不链接到屏幕截图

    从 Cukes Google Group 交叉发布 我尝试过多种保存截图的方法 但最终选择了 watir webdriver 中内置的方法 不 无论我使用哪种方法 我都无法成功嵌入 Cucumber HTML 报告中此图像的链接 在 c r
  • ggplot2 在函数或 S4 中使用时产生错误

    当在 function 或 S4 中使用 ggplot2 时 我遇到了困难 这是我的没有功能的代码 rm list ls all TRUE library nlme data Oats Data lt Oats Data Env lt fa