【发布时间】:2014-10-03 21:21:22
【问题描述】:
更新
感谢@CarlWitthoft 的帮助和建议,我的代码被简化为:
model <- unlist(sapply(1:length(model.list),
function(i) ifelse(length(model.list[[i]][model.lookup[[i]]] == "") == 0,
NA, model.list[[i]][model.lookup[[i]]])))
原帖
最近我读到一篇文章,关于如何在 R 中进行矢量化操作而不是使用 for 循环是一种很好的做法,我有一段代码,我在其中使用了一个大的 for 循环,我正在尝试将其设为矢量操作,但我找不到答案,有人可以帮助我吗?有可能还是我需要改变我的方法?我的代码适用于 for 循环,但我想尝试另一种方式。
model <- c(0)
price <- c(0)
size <- c(0)
reviews <- c(0)
for(i in 1:length(model.list)) {
if(length(model.list[[i]][model.lookup[[i]]] == "") == 0) {
model[i] <- NA
} else {
model[i] <- model.list[[i]][model.lookup[[i]]]
}
if(length(model.list[[i]][price.lookup[[i]]] == "") == 0) {
price[i] <- NA
} else {
price[i] <- model.list[[i]][price.lookup[[i]]]
}
if(length(model.list[[i]][reviews.lookup[[i]]] == "") == 0) {
reviews[i] <- NA
} else {
reviews[i] <- model.list[[i]][reviews.lookup[[i]]]
}
size[i] <- product.link[[i]][size.lookup[[i]]]
}
基本上,model.list 变量是我要从中提取特定向量的列表,该向量的位置由变量 model.lookup、price.lookup 和 reviews.lookup 给出,其中包含只有一个的逻辑向量TRUE 值,用于从 model.list 返回所需的向量。然后在for循环的每个循环中提取的向量存储在变量model、price、size和reviews中。
这个可以改成向量运算吗?
【问题讨论】:
-
这个可以改成向量运算吗? - 是的 - 答案几乎总是肯定的。我怀疑如果你让你的问题独立且可重复,你会更幸运地获得足够的答案。
标签: r for-loop vector vectorization