gpt4 book ai didi

r - 对函数结果的赋值会改变变量

转载 作者:行者123 更新时间:2023-12-02 04:56:11 25 4
gpt4 key购买 nike

浏览ave函数中,我发现了一行值得注意的行:

split(x, g) <- lapply(split(x, g), FUN) # From ave

有趣的是,这一行改变了 x 的值,这是我意想不到的。我预计split(x,g)将产生一个列表,可以对其进行分配,但随后将其丢弃。我的问题是,为什么 x 的值会变化?改变?

另一个例子可能会更好地解释:

a <- data.frame(id=c(1,1,2,2), value=c(4,5,7,6))
# id value
# 1 1 4
# 2 1 5
# 3 2 7
# 4 2 6

split(a,a$id) # Split a row-wise by id into a list of size 2
# $`1`
# id value
# 1 1 4
# 2 1 5
# $`2`
# id value
# 3 2 7
# 4 2 6

# Find the row with highest value for each id
lapply(split(a,a$id),function(x) x[which.max(x$value),])
# $`1`
# id value
# 2 1 5
# $`2`
# id value
# 3 2 7

# Assigning to the split changes the data.frame a!
split(a,a$id)<-lapply(split(a,a$id),function(x) x[which.max(x$value),])
a
# id value
# 1 1 5
# 2 1 5
# 3 2 7
# 4 2 7

不仅有a更改了,但它更改为一个看起来不像赋值右侧的值!即使分配给split(a,a$id)以某种方式改变a (我不明白),为什么它会导致 data.frame而不是list

请注意,我知道有更好的方法来完成此任务。我的问题是为什么 split(a,a$id)<-lapply(split(a,a$id),function(x) x[which.max(x$value),])更改a

最佳答案

拆分的帮助页面在其标题中说道:“替换形式替换与此类划分相对应的值。”所以它确实不应该令人意外,尽管我承认它没有被广泛使用。我不明白你的例子如何说明分配的值“看起来不像分配的 RHS!”。最大值被分配给第二个参数因子定义的类别内的“值”列表。

(我确实感谢你提出这个问题。我没有意识到 split<-ave 的核心。我想它的使用比我意识到的更广泛,因为我认为 ave 是一个非常有用的函数。)

关于r - 对函数结果的赋值会改变变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12824279/

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