【发布时间】:2016-05-04 20:42:34
【问题描述】:
我有一个用 R 编写的脚本,并测试它运行良好。代码如下:
setwd("C:/Users/xxx/Desktop/xxx")
rawdata <- read.delim("xxx.txt", check.names = FALSE, stringsAsFactors = FALSE)
library(edgeR)
y <- DGEList(counts = rawdata[,7:14], genes = rawdata[,1:6])
o <- order(rowSums(y$counts),decreasing=TRUE)
y <- y[o,]
d <- duplicated(y$genes)
y <- y[!d,]
y$samples$lib.size <-colSums(y$counts)
rownames(y$counts) <- rownames(y$genes)
y$genes <-NULL
y <- calcNormFactors(y)
write.table(y$samples, file = "TMM_normalization_factors.txt")
仅在 R 中运行时效果很好。但是,当从命令行(windows cmd)或 matlab 调用时,它会显示以下错误:
Error in is.data.frame(x) : could not find function "getGeneric"
Calls: order -> rowSums -> is.data.frame
Execution halted
我是一名新程序员,在编程方面的知识非常有限。有人可以告诉我这段代码可能有什么问题吗?非常感谢。
更新: 刚测试,报错就在
rowSums
命令。 Rscript 似乎无法识别此命令?对此有何建议?
【问题讨论】:
-
你能指出你是如何从命令行调用它的吗?我不希望您可以从 Matlab 调用 R 脚本。
-
对于 cmd,"C:\Program Files\R\R-3.2.5\bin\Rscript.exe" "C:\Users\xxx\Desktop\xxx\TMM_script.R" 将起作用.对于 matlab, system('"C:\Program Files\R\R-3.2.5\bin\Rscript.exe" "C:\Users\xxx\Desktop\xxx\TMM_script.R"') 可以工作。至少这两个适用于简单的 hello_world
-
DGEList返回的是什么类型的对象?rowSums适用于矩阵和数据框。鉴于该错误,检查rowSums的输入是否为数据框 (docs) 似乎存在问题。 -
您需要在脚本顶部添加
library(methods)。虽然是默认包,但不是Rscript加载的,去看看为什么...(可能是为了节省启动时间)