我将在前言中说我知道这是一个有点奇怪的问题,但我不知道如何用它来表达。
我在特定的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
答案 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))