inplace修改R中的向量

时间:2016-11-15 08:18:52

标签: r vector

我有一个矢量'参与者'在R。

> participant
 [1]  1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24

我正在使用功能'修改'更改此向量的内容。

modify <- function(x){
    for (i in participant){ 
    if (x[i] > 12) 
        (x[i]=x[i]-12)
        print (x[i])
}}

当我将该函数作为修改(参与者)运行时,它运行正常,但向量参与者的元素保持不变。

有任何建议,我在哪里出错?

2 个答案:

答案 0 :(得分:5)

不要使用循环。

participant <- participant - (participant > 12) * 12 

如果你坚持使用你的函数,循环索引,让你的函数返回修改后的向量并分配它:

modify <- function(x){
    for (i in seq_along(participant)){ 
      if (x[i] > 12) x[i]=x[i]-12
    } 
  return(x)
}

participant <- modify(participant)

当然,循环更难写,也更慢。

答案 1 :(得分:1)

你的问题是函数返回。使用此解决方案,因此函数返回修改后的向量x

modify <- function(x){
  for (i in participant){ 
    if (x[i] > 12) 
      (x[i] = x[i] - 12)
      print (x[i])}
  return(x)
  }

participant  <- modify(participant)

另一种解决方案是ifelse功能:

participant <- ifelse(participant > 12, participant - 12, participant)