楼主: peijianshi
2135 5

[问答] R中如何在一个函数中(需要用到外部函数)输入通用性的函数 [推广有奖]

  • 0关注
  • 16粉丝

已卖:352份资源

副教授

80%

还不是VIP/贵宾

-

威望
0
论坛币
638 个
通用积分
2.3662
学术水平
12 点
热心指数
12 点
信用等级
5 点
经验
15373 点
帖子
636
精华
0
在线时间
568 小时
注册时间
2010-3-11
最后登录
2022-9-8

楼主
peijianshi 发表于 2017-3-14 20:11:34 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

求职就业群
赵安豆老师微信:zhaoandou666

经管之家联合CDA

送您一个全额奖学金名额~ !

感谢您参与论坛问题回答

经管之家送您两个论坛币!

+2 论坛币
我一直搞不懂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的通用性,如何实现?

二维码

扫码加我 拉你入群

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

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

关键词:如何

R万岁!

沙发
bbslover 在职认证  发表于 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))
}

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

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

板凳
qiu435 发表于 2017-3-16 16:21:45
你指的是泛型函数?

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

地板
peijianshi 发表于 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)


您需要登录后才可以回帖 登录 | 我要注册

本版微信群
加好友,备注cda
拉您进交流群
GMT+8, 2026-2-21 17:12