![](/img/trans.png)
[英]Converting for() loops to apply() functions in R for a custom XIRR function
[英]R apply with custom functions
我在R中应用自定义函数时遇到问题。基本设置是我有很多要点,我想在顶部放一个网格并从每个单元格中获取最大z值。
我正在尝试的代码如下。 我要寻找的结果将返回myGrid $ z = c(5,10,na)。 na可以是其他值,只要稍后可以过滤掉即可。 我在申请阶段遇到错误
我认为我在使用Apply的方式上存在错误,但是我只是无法将自己的头缠在APP上。
谢谢,戈登
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)
编辑以包括我遗漏的return(z)行。 在返回上方的自定义函数行中添加了$ y。
首先,我建议您始终将问题简化为核心问题,而不仅仅是发布代码。 但是我想我知道您的问题是什么:
> 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)
您误解了手册中“ ...”的含义,无法将其用作传递参数的方式。 但是实际上,这只是传递独立于遍历数据对象的其他参数的方式。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.