我试图创建一个函数,它将结果的分数添加到我正在创建的数据框中,但是当我运行该函数时,它会将数据框转换为值。我的代码如下:
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
然而,当我运行脚本时,结果就是数据框&#34; playerScore&#34;转换为值为0.5
的值答案 0 :(得分: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