回收和分配函数 (`split<-` )

标签 r syntax functional-programming

有人可以解释一下这一行 R 代码是如何工作的吗?

split(dat, f) <- lapply(split(dat, f), max)

我以为这只是一个回收规则,但我真的无法理解。

数据示例:
dat <- c(1, 2, 3, 100, 200, 300)
f <- as.factor(c("a", "a", "b", "a", "b", "b"))
split(dat, f) <- lapply(split(dat, f), max)
dat
[1] 100 100 300 100 300 300

代码做我想做的事情(按组分配最大值)但问题是这是如何完成的?

最佳答案

拆分给出值 dat[c(1,2,4)]dat[c(3,5,6)]从向量。

赋值等价于 dat[c(1,2,4)] <- 100 ; dat[c(3,5,6)] <- 300这就是回收发生的地方。

已编辑

至于会发生什么,以及为什么会产生向量分配结果,请参阅语言定义手册 (http://cran.r-project.org/doc/manuals/R-lang.pdf) 的第 21 页。电话:

split(def, f) <- Z

解释为:
‘*tmp*‘ <- def
def <- "split<-"(‘*tmp*‘, f, value=Z)
rm(‘*tmp*‘)

请注意 split<-.default返回修改后的向量。

关于回收和分配函数 (`split<-` ),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14294052/

相关文章:

scala - Scala 中的柯里化(Currying)与匿名函数

scala - 为什么 Scala 中没有 "Functor"特征?

R:使用函数参数作为列表子元素的名称

regex - 仅当两者都存在时才从字符串的开头和结尾删除引号

r - 在指定向量的每个元素处分割字符串

python - 读取和写入同一个 csv 文件 - 如果满足条件则删除行(停止 writerow 以删除文件中的所有内容)

Apache 2.4.3 和 PHP 5.4.7 上的 PHP 语法错误(foreach 模板语法)

带有 block /proc/lambda 的 Ruby 双管道分配?

r - 快速计算图像(或矩阵)的质心

ios - 创建 n 个对象数组 (UILabel) 并将它们映射到另一个字符串数组