gpt4 book ai didi

r - 为什么 lapply() 将我的 R 数据框转换为列表?

转载 作者:行者123 更新时间:2023-12-04 12:42:30 24 4
gpt4 key购买 nike

我正在用 lapply() 修改 R 中的数据框并观察到我的数据框在我没有使用括号分配时被转换为列表对象。

例如,以下返回一个列表

junk <- data.frame(col1 = 1:3,
col2 = c("a,b,c"),
col3 = c(T,T,F))

junk <- lapply(junk, function(x) {
if (is.numeric(x)) return(x*2)
else return(x)})

str(junk)

其中如下返回一个数据框。
junk <- data.frame(col1 = 1:3,
col2 = c("a,b,c"),
col3 = c(T,T,F))

junk[] <- lapply(junk, function(x) {
if (is.numeric(x)) return(x*2)
else return(x)})

str(junk)

我想知道为什么 []保留数据帧结构,还有什么 []在这种情况下正在做。我明白为什么第一个代码块会转换 junk到一个列表,但不明白为什么第二个块保留结构,尽管我想不出一个明确的标题来描述问题/情况。谢谢。

最佳答案

很自然的lapply返回一个列表,因为并不总是保证函数 FUN返回相同大小的处理结果。

dat <- data.frame(a = c(1,1,2), b = c(1,1,1))
lapply(dat, unique)

第二个不通过修改原始数据框来保留结构。它这样做
tmp <- lapply(...); junk[] <- tmp; rm(tmp)

关于r - 为什么 lapply() 将我的 R 数据框转换为列表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52768440/

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