例如,
passpara = function(pa, pb, pc) {
# pa is not passed
do1(pa)
# pb and pc are passed
# passed == "--pb pb_value --pc pc_value"
# getpass is something I am trying to figure out
passed = getpass(pb, pc)
system(paste("cmd", passed))
}
具体而言,请像这样调用passpara
:
passpara(pa="dummy", pb="full-iso", pc="always")
应该等效于在shell中调用此命令:
cmd --pb full-iso --pc always
在这种情况下,getpass
函数会是什么样的?
我也认为system
函数有时会很不方便,因为它会收到一个字符串和你
必须手动分隔参数,
R中有类似于python的subprocess.call()
吗?
在python中,你可以做subprocess.call(["cmd", parameter1, parameter2, parameter3])
,和
它将自动分隔args,如果args是字符串,这非常方便
包含空格。
答案 0 :(得分:2)
请定义不方便,并尝试提供完整且可重现的示例。我们不知道变量pa
,pb
,pc
是什么,也不知道do1()
和getpass()
应该做什么。
system()
调用,就像pipe()
调用一样,允许您根据需要调用带有参数的可执行文件。我想我已使用awk
或sed
作为read.csv()
之前的过滤器在此处发布了答案。
这是一个简短的例子
R> head(readLines(pipe("cut -f2 -d, CRAN_mirrors.csv")))
[1] "Country" "0-Cloud" "Argentina" "Argentina" "Australia" "Australia"
R>
我们使用单个参数字符串pipe()
;它使用选项和命令。
编辑:您修改后的问题的答案可能就像一句话一样简单:
R> passpara <- function(pa, pb, pc) sprintf("cmd --pb %s --pc %s", pb, pc)
R> passpara(pa="dummy", pb="full-iso", pc="always")
[1] "cmd --pb full-iso --pc always"
R>
将此传递给system()
是显而易见的。
编辑2:如果参数有空格,请在它们周围放置单个刻度:
R> passpara <- function(pa, pb, pc) sprintf("cmd --pb '%s' --pc '%s'", pb, pc)
R> passpara(pa="dummy", pb="full-iso and then some", pc="always or not")
[1] "cmd --pb 'full-iso and then some' --pc 'always or not'"
R>
答案 1 :(得分:1)
在回答有关system
的投诉时,帮助页面?system
提及了{34}中的system2
功能;另请参阅:&#34;部分。 system2
函数需要将命令作为第一个参数,然后将命令参数的字符向量作为第二个参数。因此,与您为python显示的内容不完全相同,但类似,您可以将其称为:
system2("cmd", c(parameter1, parameter2, parameter3) )