我想知道是否有可能在R中的轮廓内计算区域.
例如,轮廓区域由以下原因产生:
sw<-loess(m~l+d)
mypredict<-predict(sw, fitdata) # Where fitdata is a data.frame of an x and y matrix
contour(x=seq(from=-2, to=2, length=30), y=seq(from=0, to=5, length=30), z=mypredict)
Run Code Online (Sandbox Code Playgroud)
对不起,我知道这段代码可能会令人费解.如果它太难读了.您可以向我展示如何计算简单生成轮廓的面积的任何示例都会有所帮助.
谢谢你的帮助.
我假设您正在使用contourLines返回的对象.(一个在每个级别都有x和y组件的未命名列表.)我希望在一个易于访问的位置找到它,但是找到了一个提供算法的pdf文件,我依旧记得看到http://finzi.psych.upenn .edu/R/library/PBSmapping/doc/PBSmapping-UG.pdf (参见pdf第19页,标记为" -11- ")(补充说明:关于"polygon"的维基百科文章引用了对Surveyors公式的讨论:http ://www.maa.org/pubs/Calc_articles/ma063.pdf,这证明了我使用abs()的合理性.)
建立一个例子:
x <- 10*1:nrow(volcano)
y <- 10*1:ncol(volcano)
contour(x, y, volcano);
clines <- contourLines(x, y, volcano)
x <- clines[[9]][["x"]]
y <- clines[[9]][["y"]]
level <- clines[[9]][["level"]]
level
#[1] 130
Run Code Online (Sandbox Code Playgroud)
等级== 130的区域(因为没有两个130级别而选择它并且不符合任何地块边界)是:
A = 0.5* abs( sum( x[1:(length(x)-1)]*y[2:length(x)] - y[1:(length(x)-1)]*x[2:length(x)] ) )
A
#[1] 233542.1
Run Code Online (Sandbox Code Playgroud)
感谢@DWin的可重复性示例,以及sos(我最喜欢的R包!)的作者和splancs...
library(sos)
findFn("area polygon compute")
library(splancs)
with(clines[[9]],areapl(cbind(x,y)))
Run Code Online (Sandbox Code Playgroud)
获得与@DWin相同的答案,这很令人欣慰.(据推测它是相同的算法,但是在splancs包中的Fortran例程中实现...)