我试图运行一个简单的自定义函数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)
}
如何迭代预定列表而不是整数范围?
答案 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