R适用于自定义功能

时间:2013-11-19 18:26:00

标签: r

我在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添加到返回上方的自定义函数行。

1 个答案:

答案 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。

我想如果你得到这么一小段代码,那么你知道如何调整你的情况。

<强>更新

基本上你犯了两个错误:

  1. 您可以进行函数调用而不是要应用的函数。

    函数调用:get_max_z(x,y)

    功能:function(x,y)get_max_z(x,y)

  2. 你误解了手册中“......”的含义,作为交出论点的方式。但实际上,这只是传递独立于遍历数据对象的其他参数的方法。