R-使用字符串作为表达式

时间:2016-07-19 23:20:50

标签: r concatenation

我将在前言中说我知道这是一个有点奇怪的问题,但我不知道如何用它来表达。

我在特定的R脚本中有以下几行:

hist(sce$total_counts/1e6, xlab="Library sizes (millions)", main="", 
 breaks=20, col="grey80", ylab="Number of cells");

这一点:

sce$total_counts/1e6

1e6部分应该是用户输入,我正在尝试将其设置为使第一部分和用户部分“连接”然后进行评估。问题是使用粘贴和其他东西返回字符串,我不想要字符串。我希望能够将“/ 1e6”部分替换为“/ 1e3”,并且不会更改有关该行代码的任何其他内容,并且仍然可以使用它。我试着做以下事情:

object <- paste("sce$total_counts", args[1], sep="")
ob <- parse(text=object) # expression(sce$total_counts/1e6)
hist(ob, xlab="Library sizes (millions)", main="", 
 breaks=20, col="grey80", ylab="Number of cells");

但它返回了这个错误:

Error in hist.default(ob, xlab = "Library sizes (millions)", main = "",  : 
  'x' must be numeric

我不知道如何说出来除了说:你如何将代码的一部分别名为别的?我希望ob用户输入“/ 1e6”与sce$total_counts/1e6

相同

1 个答案:

答案 0 :(得分:2)

如果您希望在执行直方图之前对hist的第一个参数执行任意转换,则传递执行转换的函数

myhist <- function(f, ...) {
  f <- match.fun(f)
  x <- 1:20
  hist(f(x, ...))
}

# test runs
myhist("/", 1e6)
myhist(function(x) x / 1e3)
f <- function(x) x / 100; myhist(f)
myhist(sqrt)

也可以像这样传递公式形式的函数。见?fn

library(gsubfn)
fn$myhist(~ x / 1e6)
fn$myhist(~ sqrt(x))