我想创建一个使用其他数据框中的某些变量创建新数据框的功能。为此,我需要以某种方式在我自己的函数中打印变量名。
变量来自两个数据框(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
感谢任何帮助。
答案 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)
}