我在R中应用自定义函数时遇到了问题。基本设置是我有一堆点,我想在顶部放一个网格并从每个单元格中获取最大z值。
我正在尝试的代码如下。我正在寻找的结果将返回myGrid $ z = c(5,10,na)。 na可以是不同的值,只要我稍后可以过滤它。我在申请阶段收到错误
我相信我在使用申请方面存在错误,但我无法理解申请。
感谢, 戈登
myPoints<-data.frame(x=c(0.7,0.9,2),y=c(0.5,0.7,3), z=c(5,3,10))
myGrid<-data.frame(x=c(0.5,2,4),y=c(0.5,3,10))
grid_spacing = 1
get_max_z<-function(x,y) {
z<-max(myPoints$z[myPoints$x > (x-grid_spacing/2)
& myPoints$x <= (x+grid_spacing/2)
& myPoints$y > (y-grid_spacing/2)
& myPoints$y <= (y+grid_spacing/2)])
return(z)
}
myGrid$z<-apply(myGrid,1,get_max_z(x,y),x=myGrid$x,y=myGrid$y)
编辑包含我遗漏的返回(z)行。将$ y添加到返回上方的自定义函数行。
答案 0 :(得分:2)
首先,我建议你总是把问题归结为核心,而不是仅仅发布代码。但我想我知道你的问题是什么:
> df <- data.frame(x = c(1,2,3), y = c(2,1,5))
> f <- function(x,y) {x+y}
> apply(df,1,function(d)f(d["x"],d["y"]))
[1] 3 3 8
apply(df,1,.)
将逐行遍历df
并将当前行作为参数传递给提供的函数。该行是一个向量,并通过唯一可用的参数d
传递给匿名函数。现在,您可以访问向量的元素,并使用两个参数将它们进一步向下移动到自定义函数f。
我想如果你得到这么一小段代码,那么你知道如何调整你的情况。
<强>更新强>
基本上你犯了两个错误:
您可以进行函数调用而不是要应用的函数。
函数调用:get_max_z(x,y)
功能:function(x,y)get_max_z(x,y)
你误解了手册中“......”的含义,作为交出论点的方式。但实际上,这只是传递独立于遍历数据对象的其他参数的方法。