编写函数并将结果添加到数据框中

问题描述 投票:-1回答:1

我正在尝试创建一个函数,它将结果的分数添加到我正在创建的数据框中,但是当我运行该函数时,它将数据框转换为值。我的代码如下:

library(dplyr)

strenght <- 0
endurance <- 0
precision <- 0
technique <- 0
speed <- 0
playerScore <- data.frame(strenght, endurance, precision, technique, speed)

test1 <- function(test1time, test1goal) {
  if(test1time <= 1000) {
    speed <- speed + 3.5
  } else if(test1time >= 1001 & test1time <= 1350) {
    speed <- speed + ((350 - (test1time - 1000))/100)
  } else {
    speed <- speed + 0
  }

  if(test1goal == 1){
    precision <- precision + 0.5
  } else {
    precision <- precision + 0
  }
}

playerScore <- test1(1025, 1)

首先,我创建一个填充零值的数据框,因为尚未运行任何测试。然后我定义了第一次测试的功能。测试有两个参数:玩家完成测试所用的秒数(test1time)和得分的目标数(test1goal)。

如果玩家在不到十秒的时间内完成测试,他应该在数据框中获得3.5分的速度分数。每0.1秒以上应该从该分数中扣除0.1分(依此类推)。类似地,测试应该起作用,以便如果玩家得分,他应该在数据框中得到0.5分到他的精确分数。

但是,我无法让代码工作 - 任何人都可以帮我看看我哪里出错了吗?

编辑:想要的结果应该是:

> str(playerScore)
'data.frame':   1 obs. of  5 variables:
 $ strenght : num 0
 $ endurance: num 0
 $ precision: num 0.5
 $ technique: num 0
 $ speed    : num 3.25

但是,当我运行脚本时,结果是数据框“playerScore”被转换为值为0.5的值

r function dataframe
1个回答
1
投票

尝试这样的事情,代码中的注释解释了原始代码的变化。

library(dplyr)

test1 <- function(test1time, test1goal) {

  strenght <- 0
  endurance <- 0
  precision <- 0
  technique <- 0
  speed <- 0

  if(test1time <= 1000) {
    speed <- speed + 3.5
  } else if(test1time >= 1001 & test1time <= 1350) {
    speed <- speed + ((350 - (test1time - 1000))/100)
  } else {
    speed <- speed + 0
  }

  if(test1goal == 1){
    precision <- precision + 0.5
  } else {
    precision <- precision + 0
  }

  return(data.frame(strenght, endurance, precision, technique, speed))

  }

你的输出:

test1(1025, 1)
  strenght endurance precision technique speed
1        0         0       0.5         0  3.25

现在,您可以在每次需要时将此信息添加到原始数据框playerScore,如下所示:

playerScore<-rbind(playerScore,test1(1025, 1))
playerScore<-rbind(playerScore,test1(1030, 8))
playerScore<-rbind(playerScore,test1(26, 1))
playerScore
  strenght endurance precision technique speed
1        0         0       0.0         0  0.00
2        0         0       0.5         0  3.25
3        0         0       0.0         0  3.20
4        0         0       0.5         0  3.50
© www.soinside.com 2019 - 2024. All rights reserved.