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

时间:2017-04-03 17:14:23

标签: r printf cat

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

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

..........
>>>

它工作正常,但我想将其作为一个功能来运行所有乐队。我想我必须在上面的代码中替换所有的w530以获得dinamic对象。因为我想使用一些申请家庭。所以,我首先创建了一个包含公共变量名称的列表:

# 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),]

然后,我尝试了几种方法,例如,使用bands<-c("w530","w550","w570","670","w700","w800") cat来使用列表中的字符串来填充我的函数。但它没有用。实际上,我不确定我会使用哪个sprintf家庭功能。如果在这种情况下可以使用任何一个:

apply

感谢任何帮助。

2 个答案:

答案 0 :(得分:0)

这是您修改功能所需要做的事情。您没有提供可重复的示例来测试它,但它应该可以工作。

 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)
 }

答案 1 :(得分:0)

Trick是使用df[varName] idiom访问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)
}