我正在尝试使用sapply
将每个对象列表的列转换为行名。
tibble::column_to_rownames()
不是一个选项,因为它"始终返回数据框"。
对于单个变量(类sf
,data.frame
(,使用base
函数:
rownames(polygon_nyc_listings[[1]]) <- polygon_nyc_listings[[1]]$zipcode
它无需更改类即可完美运行:sf
、data.frame
。
所以我试图为每个列表重复上面的功能,但没有成功:
test <- sapply(polygon_nyc_listings,
function(x){rownames(x) <- x$zipcode},
simplify = FALSE, USE.NAMES = TRUE)
相反,我得到了一个带有邮政编码列表类character
的对象。
有人知道如何进行吗?
因为在 R 函数中返回最后一行或显式return()
调用,因此匿名函数function(x) { rownames(x) <- x$zipcode }
返回每个文档row.names
的结果:
row.names
返回字符向量。
这可以通过在行名更改后调用 x 来快速修复,如注释、function(x) { rownames(x) <- x$zipcode; x }
或function(x) { rownames(x) <- x$zipcode; return(x) }
。
但是,请考虑row.names<-
(与嵌入赋值运算符的细微区别(:
function(x) { `rownames<-`(x, value= x$zipcode }
根据相同的文档:
row.names<-
返回行名称已更改的数据框。
总而言之,删除多余的大括号{...}
和默认USE.NAMES = TRUE
:
test_list <- sapply(polygon_nyc_listings,
function(df) `row.names<-`(df, value = df$zipcode),
simplify = FALSE)