我正在尝试将列添加到多个数据框中。我正在尝试创建一个将添加列的函数,然后我想在对象列表上使用该函数与lapply。该功能目前只是向数据框添加空列。但是,如果我解决了下面的问题,我想添加它来自动填充新列(并保持对象的初始名称)。 这是我到目前为止的代码:
AAA_Metadata <- data.frame(AAA_Code=character(),AAA_REV4=character(),AAA_CONCEPT=character(),AAA_Unit=character(),AAA_Date=character(),AAA_Vintage=character())
add_empty_metadata <- function(x) {
temp_dataframe <- setNames(data.frame(matrix(ncol=length(AAA_Metadata),nrow=nrow(x))),as.list(colnames(AAA_Metadata)))
x <- cbind(temp_dataframe,x)
}
然而,当我运行这个
a <- data.frame(matrix(ncol=6,nrow=100))
add_empty_metadata(a)
并查看全球环境 对象“a”仍然有6列而不是12列。 我知道我实际上正在处理函数中的“a”副本(基于我检查过的其他主题,例如Update data frame via function doesn't work)。所以我试过了:
x <<- cbind(temp_dataframe,x)
和
x <- cbind(temp_dataframe,x)
assign('x',x, envir=.GlobalEnv)
但这些都没有奏效。我想在全球环境中使用新的a以供将来参考,并保持名称'a'不变。知道我在这里做错了吗?
答案 0 :(得分:0)
这是你正在寻找的东西:
addCol <- function(x, newColNames){
for(i in newColNames){
x[,i] <- NA
}
return(x)
}
a <- data.frame(matrix(ncol=6,nrow=100));dim(a)
a <- addCol(a, newColNames = names(WIS_Metadata));dim(a)
这种东西的惊人来源是Hadley Wickham的高级R和一个网站here。
R对象是不可变的 - 它们不会改变 - 只是被摧毁并用同一个名称重建。 a
永远不会更改 - 它被用作函数的输入,除非函数内的结果对象通过return
重新分配,否则函数内部的版本(这是一个单独的环境)会被分箱功能完成。