首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将内存存储库构建为函数,输出作为下一个输入

将内存存储库构建为函数,输出作为下一个输入
EN

Stack Overflow用户
提问于 2015-07-06 21:49:20
回答 1查看 29关注 0票数 0

我建立了一个快速和肮脏的elo计算器,同时尝试了一些功能:

代码语言:javascript
复制
elo <- function(winner, loser, r1, r2){

    player <- c(winner, loser)

    K <- 32 # smoothing constant

    R1 <- 10^(r1/400)
    R2 <- 10^(r2/400)

    E1 <- R1 / (R1 + R2)
    E2 <- R2 / (R1 + R2) 

    S1 <- 1 # Win
    S2 <- 0 # Loss

    rp1 <- r1 + K * (S1 - E1)
    rp2 <- r2 + K * (S2 - E2)

    rating <- c(rp1, rp2)

    data.frame(player, rating)
}

现在,我想将内存管理(?)/存储库构建到能够“记住”每个elo分数的函数中。

现在,我正在用连续调用手动计算elo:

代码语言:javascript
复制
elo("M1", "A1", 2000, 2000)
elo("M1", "M2", 2016, 2000)
elo("A1", "M2", 1984.736, 1984)
elo("M2", "M1", 2000.7, 2031.264)
elo("M2", "A1", 2018.1, 2000.7)

我希望能够只输入赢家和输家(2000年开始新玩家),并让函数打印出新的结果,同时存储旧的值如何(用系统时间戳?)

示例:

代码语言:javascript
复制
elo("M1", "A1")

我只是不知道从哪里开始。

如有任何意见,请提出建设性的批评意见。抱歉,如果这太宽泛了!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-07-07 14:56:36

我通过向硬盘写入和读取.csv文件来保持“得分”:

代码语言:javascript
复制
elo <- function(winner, loser){

    setwd("/Users/firstlast/Documents/R/elo/")
    df <- read.csv("df.csv", header = TRUE)

    if (winner %in% df$player){
        df
    } else {
        df <- rbind(df, data.frame(player = winner, rating = 2000))
    }

    if (loser %in% df$player) {
        df 
    } else {
        df <- rbind(df, data.frame(player = loser, rating = 2000))
    }

    K <- 32 # smoothing constant

    r1 <- df[df$player == winner, 2]
    r2 <- df[df$player == loser, 2]

    R1 <- 10^(r1/400)
    R2 <- 10^(r2/400)

    E1 <- R1 / (R1 + R2)
    E2 <- R2 / (R1 + R2) 

    S1 <- 1 # Win
    S2 <- 0 # Loss

    rp1 <- r1 + K * (S1 - E1)
    rp2 <- r2 + K * (S2 - E2)

    df[df$player == winner, 2] <- rp1
    df[df$player == loser, 2] <- rp2

    write.csv(df, "df.csv", row.names = FALSE)
    return(df)
}

我现在该如何添加一些历史功能(即,随着时间的推移跟踪分数)?

一定有更好的方法把新玩家加入到df数据仓库里.我的如果其他控制结构看起来很可怕!

编辑

df的结构如下:

代码语言:javascript
复制
df <- data.frame(
    player = c("M1", "A1"), 
    rating = c(2000, 2000)
)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31256258

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档