【问题标题】:Call parameters from JAVA code in R code to dynamically pass csv file and unique ID从R代码中的JAVA代码调用参数以动态传递csv文件和唯一ID
【发布时间】:2018-08-06 18:08:47
【问题描述】:

我有一个 R 脚本,我想在其中调用 Java 代码中的参数。参数是csv file name 文件名和unique ID,它必须用于命名两个输出文件。

我的 R 脚本是:

 df1 <- read.csv("filename.csv")
 vs=colnames(df1)
 md=formula(paste(vs[3],"~",vs[1],"+",vs[2]))
 fit <- summary(aov(md, data=df1))[[1]]

 #text output   
 names(fit)[1:4]=c("DF","SS","MS","F")
 sink("test.txt")

在此代码中,第一行 df1 &lt;- read.csv("filename.csv") 应该从 JAVA code 动态获取文件名,最后一行 sink("test.txt") 应该使用 unique ID 并创建输出文件。

java代码是:

buildCommand.add("Rscript  ");  
buildCommand.add(scriptName);
buildCommand.add(inputFileWithPathExtension);
buildCommand.add(uniqueIdForR); 

我见过其他post,但我不确定它是否对我的情况有所帮助,还有类似的帖子谈论rJava package`,但没有清楚的想法。

任何帮助将不胜感激。提前致谢!

【问题讨论】:

  • 一旦你确定最终的系统命令看起来像Rscript scriptName inputFile uniqueId,你只需要处理R中的命令行参数,这不是Java特定的。
  • @RalfStubner 我是新手,所以应该是这样的args &lt;- commandArgs(TRUE)input &lt;- read.csv(args[1])
  • 是的,看起来正确。
  • @RalfStubner 我应该如何使用在 java 代码中作为参数传递的唯一 ID 来命名 R 中的输出文件。是否应该将其添加为另一个参数,如 unique_Id &lt;- as.integer(args[2])

标签: java r


【解决方案1】:

这是一个非常简单的示例,用于在您的情况下读取命令行参数:

args <- commandArgs(TRUE)
input <- args[1]
output <- paste0(args[2], ".txt")

cat("Reading from", input, "\n")
cat("Writing to", output, "\n")

例子:

$ Rscript foo.R foo.csv 1234567
Reading from foo.csv 
Writing to 1234567.txt 

【讨论】:

  • 非常感谢您的回答。
  • 我收到一个错误:Error in parse(text = x, keep.source = FALSE) : &lt;text&gt;:2:0: unexpected end of input 1: ~ + ^ 在行 vs=colnames(df1) md=formula(paste(vs[3],"~",vs[1],"+",vs[2]))
  • @K.S 这看起来好像vs[i] 是空的。您可能应该添加一个类似any(nchar(vs[1:3]) == 0) 的测试。如果那是TRUE,你应该停止执行并输出vs
  • 当输入文件被硬编码时,这个错误是不存在的。是不是因为这条线df1 &lt;- input.
  • 那行应该是df1 &lt;- read.csv(input)。最后你应该有sink(output)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-02-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-02-08
相关资源
最近更新 更多