向量不同元素

时间:2018-08-08 13:34:58

标签: r for-loop

我有以下向量:

set.seed(1); v1 = rnorm(100, 40, 10)

fun1 <- function(x){
x = x - 1
return(x)
}

fun2 <- function(x){
x = x * 10
return(x)
}

fun3 <- function(x){
x = x / 5
return(x)
}

我想为向量的长度建立一个循环,但对元素[i]应用不同的功能:

fun1 for v1[1:20]&v1[41:60]
fun2 for v1[21:40]
fun3 for v1[61:100]

然后返回向量。

结果证明我真的不知道如何优雅地做到这一点。

2 个答案:

答案 0 :(得分:4)

使用mapply

unlist(mapply(function(myFun, x) myFun(x),
              myFun = list(fun1, fun2, fun1, fun3),
              x = list(v1[1:20], v1[21:40], v1[41:60], v1[61:100])))

如果您可以使用针对某些子集使用特定功能的逻辑来更新我们,那么我们可以使其自动化程度更高,而不必为myFunx输入值。

答案 1 :(得分:2)

这里有两个没有循环的解决方案:

v2 <- numeric(length(v1))
i1 <- c(1:20, 41:60)
i2 <- 21:40
i3 <- 61:100
v2[i1] <- fun1(v1[i1]); v2[i2] <- fun2(v1[i2]); v2[i3] <- fun3(v1[i3]);
v2b <- numeric()
v2b[c(i1,i2,i3)] <- c(fun1(v1[i1]), fun2(v1[i2]), fun3(v1[i3]))
identical(v2, v2b)