使用if-else的R中的For-Loop:如何保存输出

时间:2018-03-07 10:09:18

标签: r for-loop if-statement

我正在尝试保存下面代码的输出。我知道“打印”是问题,但我不知道是什么有用。

我通常想知道是否没有其他方式而不是for-loop:对于vector(x)中的每个值,我想绘制一个新的随机数(这里使用runif)并将其与给定值匹配(这里例如0.5)。根据结果​​,x的新值应存储在向量x2中(类似于下面的if-else示例)。放弃for循环,我找不到总是为向量x中的每个值绘制一个新的随机数的方法。 我将非常感谢任何帮助!

x <- c(2,2,2,3,3,3)

for(i in x){
  if(runif(1) <= 0.5){
    print(i + 1)
  } else {
    print(i)
  }
}

2 个答案:

答案 0 :(得分:2)

或者您可以使用lapply,然后您不必每步都修改循环外的对象。

x <- c(2,2,2,3,3,3)

x2 <- unlist(lapply(x, function(x){
          if(runif(1) <= 0.5) return(x +1)
          return(x)
}))

x2

答案 1 :(得分:1)

试试这段代码:

x <- c(2,2,2,3,3,3)
x2<-NULL

for(i in 1:length(x)){
   if(runif(1) <= 0.5){
     x2[i]<-1
   } else {
     x2[i]<-2
   }
 }

您的输出

x2
[1] 1 2 2 1 2 1

x2中,您的随机数字的给定值(1和2)与runif概率相关。

这一行在同一行:

ifelse(runif(n = length(x))<=0.5,1,2)
[1] 1 2 2 2 1 1