全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 R语言论坛
2136 5
2017-03-14
我一直搞不懂R中,如果编写了一个函数,而这个函数可以适用于多种不同的模型,如何做的呢?
举个例子
x0 <- 1:10

myfun <- function(par, x){
    y   <- par[1] + par[2]*x
    val <- 2 * y
    return(val)
}

myfun(c(10, 2), x0)

上边的例子中,运行的结果对于一个线性模型,得到其结果的2倍,如果想直接在myfun()中输入任意一种形式的函数,如何做到的呢?

我只是举例2倍,实际的应用更为负责,要求可以将任何一种形式的函数直接编委myfun的一个录入变量,进而实现myfun的通用性,如何实现?

二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

全部回复
2017-3-14 21:17:50
最简单的办法就是在一个函数中写另外一个函数。

比如:
.dominateset <- function(xx,KK=20) {
  ###This function outputs the top KK neighbors.       
  
  zero <- function(x) {
    s = sort(x, index.return=TRUE)
    x[s$ix[1:(length(x)-KK)]] = 0
    return(x)
  }
  normalize <- function(X) X / rowSums(X)
  A = matrix(0,nrow(xx),ncol(xx));
  for(i in 1:nrow(xx)){
    A[i,] = zero(xx[i,]);
   
  }
  
  
  return(normalize(A))
}

二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2017-3-16 10:56:47
bbslover 发表于 2017-3-14 21:17
最简单的办法就是在一个函数中写另外一个函数。

比如:
我现在需要进行模型比较,所以需要用到外部模型,然后外部模型不管其具体形式,可以放在模型比较的函数中。所以不便直接在模型比较函数内写具体需要对比的模型形式,因为希望模型比较函数具有一定的通用性。
Anyhow, thank you for your response.
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2017-3-16 16:21:45
你指的是泛型函数?
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2017-3-16 22:37:07
如果我没理解错,你想要了解的知识应该是涉及Functional programming,
具体请阅读《advanced R》的第10、11章内容。
就你目前想解决的问题,应该用modelr包中的add_prediction(), gather_prediction(), spread_preadiction()等就能解决。
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2017-3-31 23:50:01
已经解决,谢谢回复!
答案如下:

x0 <- 1:10

mymodel <- function(P, x){
  P[1] + P[2] * x
}


myfun <- function(model, par, x){
    y   <- model(par, x)
    val <- 2 * y
    return(val)
}

myfun(mymodel, c(10, 2), x0)


二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

相关推荐
栏目导航
热门文章
推荐文章

说点什么

分享

扫码加好友,拉您进群
各岗位、行业、专业交流群