【问题标题】:print variable names in my own function r在我自己的函数 r 中打印变量名
【发布时间】:2017-04-03 17:14:23
【问题描述】:

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

变量来自两个数据框(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 将使用列表中的字符串来填充我的函数。但它没有用。实际上,我不确定我会使用哪个apply 家庭功能。如果在这种情况下可以使用任何:

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

感谢任何帮助。

【问题讨论】:

  • 您没有将这两个数据帧(即 asd 和 tetracam)传递给函数。尝试在函数中再添加两个参数,并将这两个用作您的输入。否则,函数默认无法访问环境变量。
  • 请使用dput 提供您的数据集的可重现示例。
  • Why accept an answer?。接受答案可以帮助其他有相同问题的人。

标签: r printf cat


【解决方案1】:

技巧是使用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)
}

【讨论】:

  • @Vince 非常感谢。就这么简单,完全符合我的要求。
猜你喜欢
  • 1970-01-01
  • 2021-01-26
  • 2018-10-31
  • 1970-01-01
  • 2013-10-27
  • 2013-06-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多