【问题标题】:Passing argument to subset() and unique()将参数传递给子集()和唯一()
【发布时间】:2016-05-05 01:13:29
【问题描述】:

我正在使用 phyloseq 包。

test <- function( ...){

bar <- unique(sampleData[,'pH'])

foo <- subset_samples(phyloseqObject, pH == as.numeric(bar[1]@.Data))
print(foo)

}

test(pH)

我想将 pH 作为参数传递给 test(),但 unique() 不会接受它是有效的。我可以将 'pH' 传递给test(),但subset_samples() 不会接受它是有效的。我曾尝试将论点强制转换为几种不同的类型,但没有成功。

subset_samples 的来源:

subset_samples <- function(physeq, ...){
    if( is.null(sample_data(physeq)) ){ 
        cat("Nothing subset. No sample_data in physeq.\n")
        return(physeq)
    } else {
        oldDF <- as(sample_data(physeq), "data.frame")
        newDF <- subset(oldDF, ...)
        if( class(physeq) == "sample_data" ){
            return(sample_data(newDF))
        } else {
            sample_data(physeq) <- sample_data(newDF)
            return(physeq)
        }
    }
}

【问题讨论】:

  • 你能用吗?:bar &lt;- unique(sampleData$pH)
  • @desc 这适用于unique(),但我仍然无法传递给subset()

标签: r parameter-passing subset phyloseq


【解决方案1】:

试试这个:

test=function(x,...){
   bar=unique(mtcars[,x])
   foo=subset(mtcars,mtcars[,x]==bar[1])
   return(foo)
}

【讨论】:

  • 但在我的情况下,subset() 调用通过 subset_samples() 并且该函数需要一个逻辑表达式。由于 phyloseq 类的构建方式,我需要以这种方式使用它。
  • 为了清楚起见,将源添加到subset_samples()
  • 我终于想通了。感谢您为我指明正确的方向。
  • 太棒了!很高兴为您提供帮助!
【解决方案2】:

根据@desc 所说的,我设法解决了这个问题:

test <- function(...){

    bar <- unique(sampleData[,...])

    foo <- subset_samples(phyloseqObject, eval(parse(bar@names)) == as.numeric(bar[1]))
    print(foo)

}

test('pH')

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-08-06
    • 1970-01-01
    • 2020-07-29
    • 2014-10-14
    • 2012-04-01
    • 2023-03-24
    • 2023-03-03
    • 1970-01-01
    相关资源
    最近更新 更多