我正在使用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
转换为列表,但是不明白为什么第二个代码块保留结构,尽管我想不出清楚的标题来描述问题/情况。谢谢。
答案 0 :(得分:2)
lapply
返回列表是很自然的,因为并不总是保证函数FUN
返回相同大小的处理结果。
dat <- data.frame(a = c(1,1,2), b = c(1,1,1))
lapply(dat, unique)
第二个不能通过修改原始数据帧来保留结构。它做到了
tmp <- lapply(...); junk[] <- tmp; rm(tmp)