【发布时间】:2014-11-21 07:22:17
【问题描述】:
我有以下脚本:
FGM = function (n,r,z){
x = r*sqrt(n)/(2*z)
Px = 1-pnorm(x)
}
re = 10000
data = data.frame(abs(rnorm(re,0,1)), abs(rnorm(re,0,1)), abs(rnorm(re,0,1)))
colnames(data) = c("n","r","z")
data$Px = FGM(data$n,data$r,data$z)
data$x = data$r*sqrt(data$n)/(2*data$z)
par(mar=c(4.5,4.5,1,1))
plot(data$x,data$Px, xlim = c(0,3), pch = 19, cex = 0.1, xaxs="i", yaxs="i",
xlab = expression(paste("Standardized mutational size (",italic(x), ")")),
ylab = expression(paste("P"[a],"(",italic(x),")")))
这是图表found here (box 2) 的再现。您可以在此脚本中看到,我只需绘制 10000 个具有不同 n、z 和 r 值的小黑点即可。这似乎是一个丑陋的解决方法,我想我应该能够给 R 我的功能
FGM = function (n,r,z){
x = r*sqrt(n)/(2*z)
Px = 1-pnorm(x)
}
并让它在图表上绘制一条线。但是,在网上搜索了几个小时并没有什么成果,我尝试了一些使用 abline 和 lines 的方法,但没有任何效果,有没有办法用这些函数或其他函数来做到这一点?
试过这个...
plot(data$x,data$Px, xlim = c(0,3), ylim = c(0,0.5), xaxs="i", yaxs="i",
xlab = expression(paste("Standardized mutational size (",italic(x), ")")),
ylab = expression(paste("P"[a],"(",italic(x),")")), type = "n")
curve(1-pnorm(r*sqrt(n)/(2*z)), add=T)
>Error in curve(1 - pnorm(r * sqrt(n)/(2 * z)), add = T) :
'expr' must be a function, or a call or an expression containing 'x'
>
@PaulRegular 提供了这个解决方案,但它仍然基于数据而不是公式本身进行绘图。我正在寻找一种解决方案,它可以在没有大值“re”的情况下正确生成曲线 - 使用以下但将“re”设置为 10,你可以明白我的意思......
data <- data[order(data$x),]
lines(data$x, data$Px, lwd=1)
【问题讨论】:
-
我们中的许多人都无法免费访问这篇文章。
-
运行脚本会显示同样的东西@pascal
-
然后删除无用的链接。
-
将您从脚本输出的示例图添加到您自己的问题中。
-
你的函数是矢量化的。不需要
mapply()。使用FGM( data$n,data$r,data$z )将产生相同的结果!