我正在尝试将数据帧的第一行指定为组合名称,我的数据框是动态命名的,例如“frame_1”“frame_2”e.t.c
我是这样做的:
for( i in 1:length(holder)){
colnames(eval( parse(text=paste0("frame_",i))) )<- eval( parse(text=paste0("frame_",i,"[1,]")))
}
然而,这产生了一个神秘的错误:
target of assignment expands to non-language object
我发现这令人困惑:
colnames(eval( parse(text=paste0("frame_",i))) )
为frame_i生成colnames向量
eval( parse(text=paste0("frame_",i,"[1,]")))
生成frame_i的第一行。
这两个都是相同的长度,如果有人能向我解释这个错误,我将非常感激
生成类似数据集的一些代码:
for( i in 1:1000){
assign(paste("frame",i,sep="_"), data.frame( c("desired_colname", 4, 3, 5, 7) , c("desired_colname2", 3, 1, 2, 3) )) }
所以我想把“desired_colname”作为列名。
答案 0 :(得分:2)
尝试
frame_1 <- data.frame(c("desired_colname", 4, 3, 5, 7) ,
c("desired_colname2", 3, 1, 2, 3) )
frame_2 <- data.frame( c("desired_colname", 4, 2, 6, 7) ,
c("desired_colname2", 3, 5, 3, 3) )
frame_3 <- data.frame(c("desired_colname", 5, 6, 9, 5) ,
c("desired_colname2", 5, 9, 14, 3) )
holder <- ls(pattern="^frame_")
for(i in holder){
tmp <- get(i)
colnames(tmp) <- unlist(get(i)[1,])
assign(i, tmp)
}
上述代码也可以写成:
for(i in holder){
assign(i, `names<-`(get(i), unlist(get(i)[1,])))
}
frame_1
# desired_colname desired_colname2
#1 desired_colname desired_colname2
#2 4 3
#3 3 1
#4 5 2
#5 7 3
frame_2
# desired_colname desired_colname2
#1 desired_colname desired_colname2
#2 4 3
#3 2 5
#4 6 3
#5 7 3
另一种选择是使用list2env
list2env(lapply(mget(holder), function(x)
{colnames(x) <- unlist(x[1,]);x}), envir=.GlobalEnv)
#<environment: R_GlobalEnv>
尽管如此,所有这些操作都可以在list
内完成,然后使用write.table
将其保存在文件中。