Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
对于向量的不同元素,具有不同任务的For循环_R_For Loop - Fatal编程技术网

对于向量的不同元素,具有不同任务的For循环

对于向量的不同元素,具有不同任务的For循环,r,for-loop,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) } 然后返回一个向量 事实证明,我真的不知道如何优雅地完成它。这里有两个没有循环的解决方案: v2 <- numeric(

我有以下向量:

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)
}
然后返回一个向量


事实证明,我真的不知道如何优雅地完成它。

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

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)

v2使用
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])))

如果您可以为我们更新对特定子集使用特定函数的逻辑,那么我们可以使其更加自动化,而不是为
myFun
x

键入值,为什么您需要for循环?为什么不仅仅是
result[1:20]@doviod我想创建一个新的向量,所以反复遍历现有向量并创建一个新向量是有意义的。我想我应该先创建一个空向量吗?一个友好的提示:您可以将函数定义简化为
fun1@snoram伟大的提示!打字越少越好!谢谢,这是一个很好的解决方案。在我真正的问题中,我把数字分成了三种类型,因此它们显示为字符串(类型1:12.0324.99,类型2:12.34.6789,类型3:12.045687)。我想为每种类型应用不同的函数并将其转换为数字,并通过带一个“.”的数字和带两个“.”但分隔数字的字符数不同(2对4)来识别数字对于类型3,保持原样并转换为numeric@MIH你真正的功能是把不同格式的数字转换成数字?如果您发布实际代表您的数据的示例数据,那么您可能会得到更好的解决方案,可能使用正则表达式,而不是所有这些循环问题。
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])))