在我自己的函数中打印变量名称

在我自己的函数中打印变量名称

问题描述:

我想创建一个函数,使用来自其他数据框的一些变量创建新的数据框。为此,我需要以某种方式在我自己的函数中打印变量名称。在我自己的函数中打印变量名称

变量来自两个数据帧(asd和tetracam),它们有六个共同的变量,频段“w530”,“w550”,“w570”,“670”,“w700”和“w800”。所以,我想创建六个数据帧,每个频段一个。一个接一个我可以这样写:

# Band w530 
w530<-data.frame(tetracam$filename,tetracam$time,tetracam$type,tetracam$w530,asd$w530) 
names(w530)<-c("filename","time","type","tetracam","asd") 
w530<-w530[order(w530$time),] 

它工作正常,但我想这样做是为了运行所有乐队的功能。我认为我必须替换上面代码中的所有w530以获得动态对象。正如我想到使用一些适用的家庭。所以,我首先创建一个列表与我共同变量的名称:

bands<-c("w530","w550","w570","670","w700","w800") 

然后,我试了几种方法,例如,使用catsprintf,将使用从字符串列表,以填补我的功能。但它没有奏效。其实,我不确定我会用哪个家庭功能。如果有可能在这种情况下使用任何:

my.fun<- function(band){ 
    sprintf("%s<-data.frame(tetracam$filename,tetracam$time,tetracam$type,asd$%s,tetracam$%s)",band,band,band) 
    sprintf("names(%s)<-c('filename','time','type','asd','tetracam')",band) 
    sprintf("%s[order(%s$time),]",band,band) 
} 

任何帮助表示赞赏。

+0

您没有将这两个数据帧(即asd和tetracam)传递到函数中。尝试再添加两个参数两个函数,并将这两个参数用作输入。否则,默认情况下,函数无法访问环境变量。 – Masoud

+0

请使用'dput'为您的数据集提供一个可重现的例子。 – Masoud

+0

[为什么接受答案?](https://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work)。接受答案可以帮助其他有相同问题的人。 – Masoud

这是你需要做的修改你的功能的一部分。你没有提供可重复的例子来测试这个,但它应该工作。

my.fun<- function(band, tetracam,asd){ 
    sprintf("%s<-  data.frame(tetracam$filename,tetracam$time,tetracam$type,asd$%s, 
    tetracam$%s)",band,band,band) 
    sprintf("names(%s)<-c('filename','time','type','asd','tetracam')",band) 
    sprintf("%s[order(%s$time),]",band,band) 
} 

窍门是使用df[varName]习语来访问data.frame列。

fun1 <- function(band, tetracam, asd){ 

    df<-data.frame(tetracam$filename,tetracam$time,tetracam$type,tetracam[band],asd[band]) 
    names(df)<-c("filename","time","type","tetracam","asd") 
    df<-df[order(df$time),] 
    return(df) 
} 

for (band in bands){ 
    single_band_df <- fun1(band, tetracam, asd) 
} 
+0

@ Vince非常感谢。简单的那样,做了我所需要的。 – rafaexx