如果之前已经询问过,或者我错过了某些明显的事情,我很抱歉。在多维范围内子集的最简单方法?
我有两个数据集,“旧数据”和“newdata”
set.seed(0)
olddata <- data.frame(x = rnorm(10, 0,5), y = runif(10, 0, 5), z = runif(10,-10,10))
newdata <- data.frame(x = -5:5, z = -5:5)
我创建一个从旧的数据模型,并希望从新的数据预测值
mymodel <- lm(y ~ x+z, data = olddata)
predict.lm(mymodel, newdata)
然而,我想将'newdata'中的变量范围限制在模型被训练的变量范围内。
我当然可以这样做:
newnewdata <- subset(newdata,
x < max(olddata$x) & x > min(olddata$x) &
z < max(olddata$z) & z > max(olddata$z))
但是,这在许多方面变得棘手。有没有一个重复的方式来做到这一点?
我不知道这是一个矢量化的方法。 'apply'是一个for循环,但是你的实现循环遍历数据的每一行,而不是遍及每一列。我想这就是速度差异来自哪里。 – SchaunW 2013-05-02 14:54:15
已注意。我编辑了我的答案。我还探讨了遍历行是否是性能差异的原因。在列上使用mapply仅为迭代子集的2.6倍。 – orizon 2013-05-03 00:37:54