【发布时间】: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
}
}
【问题讨论】:
我有这样的问题。我使用这种语句管理它,但它很慢。我可以使用 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
}
}
【问题讨论】:
您不需要显式或隐式循环;只需使用ifelse:
x[, 3] <- ifelse(x[, 1] > x[, 2], 1, 0)
事实上,你可以进一步简化:
x[, 3] <- x[, 1] > x[, 2]
这将创建一个逻辑列而不是数字列,但对于大多数用途而言,这已经足够接近了。如果没有,您可以将逻辑转换回数字:
x[, 3] <- as.numeric(x[, 1] > x[, 2])
【讨论】: