【问题标题】:R avoid a for loop using an applyR避免使用apply的for循环
【发布时间】:2016-11-24 14:42:26
【问题描述】:

我有这样的问题。我使用这种语句管理它,但它很慢。我可以使用 apply 函数来提高性能吗?

x<-matrix(sample(1:100,40),20,2)
x<-as.data.frame(x)
for ( i in 1:nrow(x))
{
  if ( x[i,1]>x[i,2] ){
    x[i,3]<-1
  } else {
    x[i,3]<-0
  }
}

【问题讨论】:

    标签: r for-loop apply


    【解决方案1】:

    您不需要显式或隐式循环;只需使用ifelse:

    x[, 3] <- ifelse(x[, 1] > x[, 2], 1, 0)
    

    事实上,你可以进一步简化:

    x[, 3] <- x[, 1] > x[, 2]
    

    这将创建一个逻辑列而不是数字列,但对于大多数用途而言,这已经足够接近了。如果没有,您可以将逻辑转换回数字:

    x[, 3] <- as.numeric(x[, 1] > x[, 2])
    

    【讨论】:

    • 在我的机器上,这大约快 10 倍
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-09
    • 2023-03-27
    • 2018-01-08
    • 2011-06-21
    • 1970-01-01
    相关资源
    最近更新 更多