使用assign()函数将列名分配到R中的空数据框中
我有一个空数据框,它的名称是由assign()函数创建的使用assign()函数将列名分配到R中的空数据框中,r,assignment-operator,R,Assignment Operator,我有一个空数据框,它的名称是由assign()函数创建的 x <- "Sale" y <- "2015" col_names <- c("Q1","Q2","Q3") assign(paste0(x,y), data.frame(matrix(nrow = 0, ncol = length(col_names)))) 我试过了,但没有成功。 有没有办法解决这个问题? 非常感谢 您可以在assign语句中包含对setNames的调用: assign(paste0(x,y),
x <- "Sale"
y <- "2015"
col_names <- c("Q1","Q2","Q3")
assign(paste0(x,y), data.frame(matrix(nrow = 0, ncol = length(col_names))))
我试过了,但没有成功。
有没有办法解决这个问题?
非常感谢 您可以在
assign
语句中包含对setNames
的调用:
assign(paste0(x,y),
setNames(data.frame(matrix(nrow = 0, ncol = length(col_names))),
col_names)
示例:
assign("dfa", setNames(data.frame(1:3), "col1"))
> dfa
# col1
#1 1
#2 2
#3 3
如果您已经创建了数据集,那么通用替换函数
names您遇到的困难(在后面的代码中如何引用使用动态生成的名称创建的对象)正是assign
不好的原因。您的问题实际上是由于您希望使用assign
将数据框放入具有非动态变量名称的列表中,并使用“动态”元素设置列表中该元素的名称:
a <- list(setNames(data.frame(matrix(nrow = 0, ncol = length(col_names))),col_names))
names(a) <- paste0(x,y)
> a
$Sale2015
[1] Q1 Q2 Q3
<0 rows> (or 0-length row.names)
a为什么需要分配
<代码>colnames(Sale2015),因为x和y是动态的。因为x和y是动态的。如果我写colnames(Sale2015),我更喜欢这些一步(一行程序)流程,而不是多行程序!!
assign(paste0(x,y), `names<-`(get(paste0(x,y)), col_names))
a <- list(setNames(data.frame(matrix(nrow = 0, ncol = length(col_names))),col_names))
names(a) <- paste0(x,y)
> a
$Sale2015
[1] Q1 Q2 Q3
<0 rows> (or 0-length row.names)