【问题标题】:Error when calling Rscript from command/matlab in windows从 Windows 中的命令/matlab 调用 Rscript 时出错
【发布时间】: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加载的,去看看为什么...(可能是为了节省启动时间)

标签: r matlab


【解决方案1】:

正如上面 cmets 中提到的 flodel,代码在直接从 R 运行而不是在使用 Rscript 运行时工作的原因是因为 Rscript 过去不加载方法包。因此解决方案是在脚本顶部加载方法包:

load(methods)

但是,从 R 3.5.0(2018-04-23 发布)开始,现在默认加载方法包。来自R NEWS

如果不使用 --default-packages,那么 Rscript 现在会检查环境变量 R_SCRIPT_DEFAULT_PACKAGES。如果设置了此项,则它优先于 R_DEFAULT_PACKAGES。如果没有在命令行或这些环境变量之一指定默认包,则 Rscript 现在使用与 R 相同的默认包。现在,可以通过将环境变量 R_SCRIPT_LEGACY 设置为 yes 来恢复以前不包含方法的行为.

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-07-22
    • 2016-11-21
    • 2013-04-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-10
    • 2020-12-17
    相关资源
    最近更新 更多