【问题标题】:R: Make dataframes in a function with name dependent on inputR:在名称取决于输入的函数中制作数据框
【发布时间】:2021-01-08 23:07:32
【问题描述】:

因此,我创建了几个足球队在 1950-2020 年间的结果数据框,包括胜率。

我现在想计算每支球队每年的胜率。所以我每队会有 70 胜率。

为此,我编写了一个函数来计算每支球队在给定年份的胜率:

winrate_py_f <- function(team, data, year1){
  years = filter(results, year == year1)
  won = filter(years, home_team == team & difference > 0 | away_team == team & difference < 0)
  matches = filter(years, home_team == team | away_team == team)
  winrate{_year1} = ((nrow(won) / nrow(matches)) * 100)
  return(formatC(winrate))
}

现在我想将结果命名为:winrate_1967 例如 1967 年。这就是 {_year} 部分的用途,但这显然不起作用。

这样做的正确方法是什么?

要特别清楚:

我想用例如 (Brazil, data, 1950:2020) 调用这个函数,这样我就可以得到巴西在 1950 年到 2020 年之间每年的胜率。

【问题讨论】:

  • 如果您在一系列值上调用该函数,请将== 更改为%in%。什么是 results 对象。它不作为参数传入
  • 请包含您使用的所有包
  • 啊哈,好的,谢谢!结果是一个包含足球比赛的数据框,其中包含有关年份、分数等的数据。

标签: r function namespaces


【解决方案1】:

不要在函数内进行赋值,而是将输出然后assign函数的值返回给使用paste创建的对象

winrate_py_f <- function(data, team year1){
    years = filter(data, year == year1)
    won = filter(years, home_team == {{team}} & difference > 0 | 
              away_team == {{team}} & difference < 0)
    matches = filter(years, home_team == {{team}} | away_team == {{team}})
     ((nrow(won) / nrow(matches)) * 100)
    
  }

调用函数

assign(paste0("winrate_", 1967), winrate_py_f(data, Brazil, 1967))

现在检查

winrate_1967

注意:在这里,我们假设 'year1' 是单个值,而不是值范围

【讨论】:

    猜你喜欢
    • 2020-12-14
    • 2018-05-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-14
    • 2021-12-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多