圆形元素超过1

时间:2015-09-11 22:27:29

标签: r if-statement for-loop rounding

我试图运行一个简单的自定义函数test,它接受​​向量x并在条目大于1时对内容进行舍入,返回一个新向量。例如,对于输入x <- c(.5, .2, 1.6, 7.9),我希望test(x)输出[1] 0.5 0.2 2 8

但是,我的代码要么返回1个条目,要么只改变1个条目,并将输出的其余部分留空。

test <- function(x) {
  nr <- nrow(x)
  e <- numeric(nr)
  for (i in x) {
    if(i > 1) {
      e <- round(i, 1) 
    }
    else {
      e <- i 
    }
  }
  return(e)
}

如何迭代预定列表而不是整数范围?

1 个答案:

答案 0 :(得分:1)

使用ifelse代替使用嵌入式if语句执行for循环,而不是更高效(在运行时和写入的代码量方面)。您可以将整个函数转换为单行代码:

test <- function(x) ifelse(x > 1, round(x, 0), x)

这是在行动:

x <- c(.5, .2, 1.6, 7.9)
test(x)
# [1] 0.5 0.2 2.0 8.0