【发布时间】:2023-03-07 14:51:01
【问题描述】:
所以早些时候我回答了我自己关于在 R 中思考向量的问题。但现在我遇到了另一个我无法“向量化”的问题。我知道向量更快,循环更慢,但我不知道如何在向量方法中做到这一点:
我有一个数据框(出于情感原因,我喜欢将其称为 my.data),我想对其进行全面的边际分析。我需要一次删除某些元素并“赋值”数据框,然后我需要通过仅删除下一个元素来再次进行迭代。然后再做一次……再一次……这个想法是对我的数据子集进行全面的边际分析。无论如何,我无法想象如何以矢量有效的方式做到这一点。
我已经缩短了代码的循环部分,它看起来像这样:
for (j in my.data$item[my.data$fixed==0]) { # <-- selects the items I want to loop
# through
my.data.it <- my.data[my.data$item!= j,] # <-- this kicks item j out of the list
sum.data <-aggregate(my.data.it, by=list(year), FUN=sum, na.rm=TRUE) #<-- do an
# aggregation
do(a.little.dance) && make(a.little.love) -> get.down(tonight) # <-- a little
# song and dance
delta <- (get.love) # <-- get some love
delta.list<-append(delta.list, delta, after=length(delta.list)) #<-- put my love
# in a vector
}
所以很明显我在中间砍掉了一堆东西,只是为了让它不那么笨拙。目标是使用更有效的向量来删除 j 循环。有什么想法吗?
【问题讨论】:
-
@joran:编辑 30 个月前的问题必须有奖励。 :)
-
死灵法师的某个版本,也许吧?
-
好主意。我在想像自然历史博物馆馆长那样的事情可能不那么病态。或者侏罗纪公园?
-
我很震惊这个问题持续了三年,没有人评论关于速度的部分。矢量化通常会产生速度提升,但并非总是如此;可读性往往是更重要的原因。
-
@gsk3,请记住,当我最初提出这个问题时,只有大约 5 个人在阅读 [r] 问题 :)