我有一个用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似乎没有认识到这个命令?有什么建议吗?
答案 0 :(得分:0)
正如上面评论中提到的flodel一样,直接从R运行而不是与Rscript一起运行时代码起作用的原因是因为Rscript过去不加载方法包。因此,解决方案是将方法包加载到脚本顶部:
load(methods)
但是,从R 3.5.0(于2018-04-23发布)开始,现在默认情况下已加载method软件包。来自R NEWS:
如果未使用--default-packages,则Rscript现在检查环境变量R_SCRIPT_DEFAULT_PACKAGES。如果已设置,则它优先于R_DEFAULT_PACKAGES。如果未在命令行上或这些环境变量之一中未指定默认软件包,则Rscript现在使用与R相同的默认软件包。现在,可以通过将环境变量R_SCRIPT_LEGACY设置为yes来恢复以前不包括方法的行为。