【发布时间】:2016-11-12 19:03:45
【问题描述】:
我需要从输入另一个数据框名称并重塑数据的函数创建一个数据框。当我需要在输入表名的转换后命名输出时,问题就出现了。 到目前为止我的代码是:
tablaXYZ<-data.frame(a=seq(1,2,1), 'X1'=seq(2,3,1), 'X2'=seq(3,4,1))
rownames(tablaXYZ)<-c('X1', 'X2')
而我写的函数是:
creaMelts<-function(tbl){
library(reshape2)
texto<-deparse(substitute(tbl))
tbl2<-melt(tbl, id.vars=rownames(tbl))
texto2<-substr(texto,4,nchar(texto))
colnames(tbl2)<-c('userId','movieId', texto2)
tblName<<-paste0('df', texto2)
print(paste('tblName', tblName, ' '))
assign(tblName, tbl2)
return(assign(tblName, tbl2))
}
当我跑步时:
creaMelts(tablaXYZ)
我明白了:
"tblName dflaXYZ "
因此,考虑到“分配”作品在第二位给出的对象中返回,名称存储在第一位的对象中,例如:
`m<-'hola'`
assign(m, tablaXYZ)
然后我要求 m,我得到:
"hola"
但如果我要“hola”,我会得到桌子:
hola
a X1 X2
X1 1 2 3
X2 2 3 4
我想我会有一个名为“dflaXYZ”的数据框,其中包含以下值:
userId movieId laXYZ NA
1 2 3 a 1
2 3 4 a 2
但是如果我运行:
dflaXYZ
我只得到:
"dflaXYZ"
如果我运行例如:
a<-creaMelts(tablaXYZ)
然后问“a”,我得到了想要的表。
userId movieId laXYZ NA
1 2 3 a 1
2 3 4 a 2
我需要获取相同的表,但在这种情况下命名为 dflaXYZ(删除第一个 3 个字母并将 df 添加到输入表名)。
【问题讨论】: