gpt4 book ai didi

r - R 中有快捷方式/别名/指针的概念吗?

转载 作者:行者123 更新时间:2023-12-04 11:27:34 26 4
gpt4 key购买 nike

我正在 R 中处理一个相当大的数据集,它被分成几个数据帧。

问题是我对整个集合做了一些事情,有时我只需要处理或修改集合的一部分,而我的选择器变得非常笨重,例如

aListOfItems$attribute4([aListOfItems$attribute1 == true & aListOfItems$attribute2 == 6
& aListOfItems$attribute3 == "C"),] <- aListOfItems([aListOfItems$attribute1 == true &
aListOfItems$attribute2 == 6 & aListOfItems$attribute3 == "C"),aListOfItems$attribute5]
* aListOfItems([aListOfItems$attribute1 == true & aListOfItems$attribute2 == 6 &
aListOfItems$attribute3 == "C"),aListOfItems$attribute7]

(这将所有条目的选定部分的属性 4 设置为 (attribute5 * attribute6)。)

这是可怕的阅读,理解和编辑。

由于 RAM 的原因,将它们拆分为不同的数据帧并不是一个真正的选择,因为我定期刷新这些数据并重建所有单独的数据帧也很痛苦。

那么,有没有办法做类似的事情
items_t6C <- &(aListOfItems([aListOfItems$attribute1 == true & aListOfItems$attribute2
== 6 & aListOfItems$attribute3 == "C"),]

所以我可以使用
items_t6C$attribute4 <- # do something

或者,也许可以将这样的选择器存储在字符串变量中并使用它?

最佳答案

您可以先构造一个逻辑向量,给它一个有意义的名称,然后在命令中使用它。它使您的脚本更长一些,但更容易阅读:

interesting_bit = with(aListOfItems, attribute1 &   
attribute2 == 6 &
attribute3 == "C")

此外,使用一点缩进也使代码更具可读性。
aListOfItems$attribute4[interesting_bit,] <- 
aListOfItems[interesting_bit,aListOfItems$attribute5]
* aListOfItems[interesting_bit,aListOfItems$attribute7]

并使用 within做更多的可读性:
aListOfItems[interesting_bit,] = within(aListOfItems[interesting_bit,], {
attribute4 = attribute5 * attribute7
}

此外,对于逻辑,无需显式测试 == true :
interesting_bit = aListOfItems$attribute1 &   
aListOfItems$attribute2 == 6 & aListOfItems$attribute3 == "C"

这最终减少了这一点:
aListOfItems$attribute4([aListOfItems$attribute1 == true & aListOfItems$attribute2 == 6
& aListOfItems$attribute3 == "C"),] <- aListOfItems([aListOfItems$attribute1 == true &
aListOfItems$attribute2 == 6 & aListOfItems$attribute3 == "C"),aListOfItems$attribute5]
* aListOfItems([aListOfItems$attribute1 == true & aListOfItems$attribute2 == 6 &
aListOfItems$attribute3 == "C"),aListOfItems$attribute7]

对此(注意 with 的额外使用):
interesting_bit = with(aListOfItems, attribute1 &   
attribute2 == 6 &
attribute3 == "C")
aListOfItems[interesting_bit,] = within(aListOfItems[interesting_bit,], {
attribute4 = attribute5 * attribute7
}

这段代码不仅看起来不那么令人生畏,而且可以立即传达您正在做什么,这很难从您的原始代码中推测出来。

关于r - R 中有快捷方式/别名/指针的概念吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15829805/

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