R 编写函数并将结果添加到数据帧

R 编写函数并将结果添加到数据帧,r,function,dataframe,R,Function,Dataframe,我试图创建一个函数,它将结果的分数添加到我正在创建的数据框中,但当我运行该函数时,它将数据框转换为值。我的代码如下所示: library(dplyr) strenght <- 0 endurance <- 0 precision <- 0 technique <- 0 speed <- 0 playerScore <- data.frame(strenght, endurance, precision, technique, speed) test1 &l

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

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)

但是,当我运行脚本时,结果是数据帧“playerScore”被转换为值为0.5的值。请尝试类似的操作,代码中的注释解释对原始代码的更改

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))

  }
现在,您可以随时将此信息添加到原始数据帧
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

playerscore您认为您的函数返回了什么?你所说的“无法使代码工作”到底是什么意思?当我运行所有程序时,结果是数据帧被转换为等于0.5的值,因此我在某个地方出错,但我花了一整天时间在上面,无法使其工作。返回的应该是:>str(playerScore)'data.frame':1 obs。共有5个变量:$strength:num 0$耐力:num 0$精度:num 0.5$技术:num 0$速度:num 3.25,但它只是简单地转换为一个值而已,非常感谢!它返回的是我需要它的确切信息。一件简单的事情:当我运行playerScore时,是的,这是错误的。根据回答中的这一点添加的代码非常感谢!我还尝试将其他三个变量添加到return命令中(这很有效,因为它们不包含任何内容),但这似乎是一个更好的解决方案:-)最后一个问题(对不起):我希望能够创建“test2”并累积结果。但是,当我尝试为测试2添加分数时,它会替换分数。这个问题有什么好的解决方案吗?答案改变了,现在您可以向原始数据帧添加额外的行了
test1(1025, 1)
  strenght endurance precision technique speed
1        0         0       0.5         0  3.25
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