gpt4 book ai didi

r - 矢量化我的想法 : Vector Operations in R

转载 作者:行者123 更新时间:2023-12-03 22:22:52 26 4
gpt4 key购买 nike

所以早些时候我回答了我自己关于在 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 循环。有任何想法吗?

最佳答案

这似乎是另一种非常 R 型的生成总和的方法。生成一个与输入向量一样长的向量,只包含 n 个元素的重复总和。然后,从 sums 向量中减去原始向量。结果:一个向量(isums),其中每个条目都是原始向量减去第 i 个元素。

> (my.data$item[my.data$fixed==0])
[1] 1 1 3 5 7
> sums <- rep(sum(my.data$item[my.data$fixed==0]),length(my.data$item[my.data$fixed==0]))
> sums
[1] 17 17 17 17 17
> isums <- sums - (my.data$item[my.data$fixed==0])
> isums
[1] 16 16 14 12 10

关于r - 矢量化我的想法 : Vector Operations in R,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/445059/

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