R - 为什么我的函数似乎可以工作但不能更新列表中的小标题?
R - Why does my function appear to work but not update tibbles within a list?
我有一个 tibbles 列表并使用下面的代码
我希望列表中的每个 tibble 都会有一列添加一个因子(16 个级别之一)。我可以准确地看到我想要打印到控制台的内容,但在全局环境中,我的 tibbles 列表保持不变。我做错了什么?
fn <- function(df){
df$col1 = cut(df$col1, 16)
return(df)
for (df in listoftibbles){
df <- fn(df)
print (df)
}
在 for
循环中,它不会更新 listoftibbles
中的元素,即如果我们想这样做,循环遍历对象的序列并通过赋值更新
for(ind in seq_along(listoftibbles)) {
listoftibbles[[ind]] <- fn(listoftibbles[[ind]])
}
R
中的 for
循环是针对 returns 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' 的值将是 listoftibbles
的最后一个 tibble
地址也可以查看
> 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))
将输出分配回 listoftibbles
。
for (i in seq_along(listoftibbles)) {
listoftibbles[[i]] <- fn(listoftibbles[[i]])
print (listoftibbles[[i]])
}
我有一个 tibbles 列表并使用下面的代码 我希望列表中的每个 tibble 都会有一列添加一个因子(16 个级别之一)。我可以准确地看到我想要打印到控制台的内容,但在全局环境中,我的 tibbles 列表保持不变。我做错了什么?
fn <- function(df){
df$col1 = cut(df$col1, 16)
return(df)
for (df in listoftibbles){
df <- fn(df)
print (df)
}
在 for
循环中,它不会更新 listoftibbles
中的元素,即如果我们想这样做,循环遍历对象的序列并通过赋值更新
for(ind in seq_along(listoftibbles)) {
listoftibbles[[ind]] <- fn(listoftibbles[[ind]])
}
R
中的 for
循环是针对 returns 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' 的值将是 listoftibbles
tibble
地址也可以查看
> 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))
将输出分配回 listoftibbles
。
for (i in seq_along(listoftibbles)) {
listoftibbles[[i]] <- fn(listoftibbles[[i]])
print (listoftibbles[[i]])
}