r - R - 为什么我的函数似乎可以工作但不能更新列表中的小标题?
问题描述
我有一个小标题列表并使用下面的代码我希望列表中的每个小标题都会添加一个带有因子的列(16 个级别之一)。我可以准确地看到我想要打印到控制台的内容,但在全局环境中,我的小标题列表保持不变。我究竟做错了什么?
fn <- function(df){
df$col1 = cut(df$col1, 16)
return(df)
for (df in listoftibbles){
df <- fn(df)
print (df)
}
解决方案
在for
循环中,它不会更新listoftibbles
ie 中的元素。如果我们想这样做,循环对象的序列并通过赋值更新
for(ind in seq_along(listoftibbles)) {
listoftibbles[[ind]] <- fn(listoftibbles[[ind]])
}
for
循环 inR
是一个 for each 循环,它返回list
元素的值。“df”对象是动态创建的临时对象。这可以通过检查ls
(假设有 2 个列表元素)
> ls(pattern = '^df$')
character(0) # no object
> for(df in listoftibbles) print(ls(pattern = '^df$'))
[1] "df"
[1] "df"
> ls(pattern = '^df$')
[1] "df" # now there is an object
对象“df”的值将是最后tibble
一个listoftibbles
并且地址也可以检查
> for(df in listoftibbles) print(tracemem(df))
[1] "<0x7fe59eb4f6c0>"
[1] "<0x7fe598361ac8>"
> tracemem(df) # last object created
[1] "<0x7fe598361ac8>"
我们可以使用lapply
(首先发布在这里)
listoftibbles <- lapply(listoftibbles, fn)
或者这不需要任何功能
listoftibbles <- lapply(listoftibbles, transform, col1 = cut(col1, 16))
或与map
library(dplyr)
library(purrr)
listoftibbles <- map(listoftibbles, mutate, col1 = cut(col1, 16))
推荐阅读
- package - Python 包安装
- google-chrome - Chrome:控制台日志消息在哪里?
- angular - Angular Slickgrid - customValidator 不适用于 SingleSelect 编辑器
- sql - 如何在更新查询时更新有限数量的记录?
- python - 通过 ssh 有条件地运行子进程,同时将输出附加到(可能是远程的)文件
- amazon-web-services - AWS 工作区用户和密码定义
- axon - 尝试在 axon 服务器 4.4 上注册用户时被禁止
- blockchain - Corda 中的 startFlow 和 startTrackedFlow 有什么区别?
- c# - 什么时候在同一个类的静态构造函数之前访问一个类的静态成员
- python - 是否有用于查找数字和分类列的 python 函数?