【问题标题】:How to write a function that takes a model as an argument in R如何在 R 中编写一个将模型作为参数的函数
【发布时间】:2015-07-11 18:28:12
【问题描述】:

R 中的某些函数可以将模型作为参数。例如,函数 lm(weight ~ group) 将“weight~group”作为参数,并将其解释为“使用权重为 Y,组为 X 进行回归”。这样的函数怎么写?

例如,我有以下名为“GDP_data”的数据: (请运行sn -p 显示数据表。我不知道如何让它自动显示)

<table style="width:100%">
  <tr>
    <td>State</td>
    <td>City</td> 
    <td>GDP</td>
  </tr>
  
  <tr>
    <td>TX</td>
    <td>Austin</td> 
    <td>678</td>
  </tr>
  
  <tr>
    <td>TX</td>
    <td>Dallas</td> 
    <td>1035</td>
  </tr>
  
  <tr>
    <td>TX</td>
    <td>Houston</td> 
    <td>2035</td>
  </tr>
  
  <tr>
    <td>...</td>
    <td>...</td> 
    <td>...</td>
  </tr>
  
  <tr>
    <td>NY</td>
    <td>New York</td> 
    <td>10007</td>
  </tr>
  
  <tr>
    <td>NY</td>
    <td>Essex</td> 
    <td>2007</td>
  </tr>
  
</table>

我想编写一个名为 GDP_sum 的函数,它可以计算一个州所有城市的 GDP 总和。代码 GDP_sum(data=GDP_data, GDP~State) 应该给我每个州总 GDP 的向量。

【问题讨论】:

  • 解决家庭作业(或实际工作)问题的基本任务是将其分解为步骤。首先,您搜索 SO 或使用 Google 搜索如何从 HTML 表中创建 R 数据框或矩阵对象,然后搜索如何按类别聚合。然后搜索如何使用 R 公式对象。你不只是发布一个问题,说“请为我做我的工作”。
  • 这个问题的目的是学习如何制作一个以“模型”作为参数的函数。我不需要你做我的硬件@BondedDust!削减你的消极情绪。我只是编了一个例子,这样人们就可以用一个例子来教学。
  • 所以你不是真的想把那个叫做“code sn-p”的东西用作输入吗?然后aggregate.formula 的代码似乎是一个完整的答案。在控制台输入:getAnywhere(aggregate.formula)
  • 感谢您的回答。我只是认为 HTML 是一种更好的方式来显示我的示例数据表。但显然 HTML 代码是作为“代码 sn-p”嵌入的,而不是显示一个实际的表格。

标签: r


【解决方案1】:

我建议单独使用aggregate。这是我想出的:

state <- c("California","Texas","Texas")
city <- c("San Francisco","Dallas","Austin")
GDP <- c(10000,20000,30000)
data <- data.frame(state,city,GDP)

GDP_sum <- function(data1, slice){
  newDf <- aggregate(slice, data = data1, sum)
  return(newDf)
}

GDP_sum(data, GDP~state)

       state   GDP
1 California 10000
2      Texas 50000

【讨论】:

  • 感谢您的回答。但是,我不需要你解决我的示例问题,这对我来说是微不足道的。我想知道如何制作一个可以将“模型”作为参数的函数。我编写了示例,以便人们理解我的意思并教我如何使用示例
  • 我不知道你所说的“模型”是什么意思。
  • 他的意思是formula,并且已经有一个名为aggregate.formula的基本R函数。
  • 公式!就是这个词。
猜你喜欢
  • 2021-05-23
  • 2020-09-28
  • 1970-01-01
  • 2012-01-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-08-16
相关资源
最近更新 更多