gpt4 book ai didi

r - 尝试矢量化 R 中的 for 循环

转载 作者:行者123 更新时间:2023-12-05 07:58:18 25 4
gpt4 key购买 nike

更新

感谢@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.lookupreviews.lookup 包含只有一个 TRUE 值的逻辑向量,用于从 model 返回所需的向量.列表。然后,for 循环的每个循环将提取的向量存储在变量 modelpricesizereviews 中。

这能改成向量运算吗?

最佳答案

一般来说,尽量避免if不需要的时候。我认为您可以按如下方式构建所需的输出。

model <- unlist(sapply(1:length(model.list), function(i) model.list[[i]][model.lookup[[i]]]))
model[model=='']<-NA

对于您的其他变量也是如此。这假设所有 model.lookup[[i]]长度为一。如果不是,您将无法将输出写入 model 的单个元素。首先。

我还会注意到您严重过度编码,例如x<-0优于x<-c(0) , 不要理会 length对单个项目的评估。

关于r - 尝试矢量化 R 中的 for 循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25236642/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com