我需要从一个函数创建一个数据框,输入另一个数据框名称并重塑数据。问题在于我需要将输出命名为输入表名的转换结果。
到目前为止,我的代码如下:
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)
I get:
"tblName dflaXYZ "
因此,考虑到“assign”函数将第二个参数中的对象返回给存储在第一个参数对象中的名称,例如:
`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
添加到输入表格名称中)。
.GlobalEnv
代替parent.frame
,因为lapply
是另一个环境,它是该函数的父环境。 - akrunassign
的。 - akrun