【发布时间】:2012-08-12 21:58:51
【问题描述】:
我想让 R 更容易执行系统命令。像 ipython 与 python 之类的东西。以下是一些想法:
- 定义 cd 函数以通过包装 getwd 和 setwd 来更改工作目录
- 定义一个运算符来包装 system() 命令,这样我就可以运行类似 "$ls" 的东西来替换 system("ls")
第一个很容易完成。但是,我坚持使用第二个。我发现没有办法在 R 中为字符串重新定义运算符。然后我退后一步,我尝试定义一个 sys(param)。但是现在,我仍然需要输入引号。例如我需要运行 sys("ls") 而不是 sys(ls) 来列出目录。有没有办法让参数假设它是一个字符串,即使没有引号?谢谢。欢迎提出任何建议。
【问题讨论】:
-
@Bob,你的意思是这样吗? stackoverflow.com/questions/520810/…
-
如果您的意思是希望能够将
foo作为函数/命令而不是foo()键入,那么请查看makeActiveBinding。这是我在我的 Rprofile 中加载的一个:invisible(makeActiveBinding('prev', function(...) .Last.value, .GlobalEnv))。如果您希望能够加载完整的命令字符串,可能 GSee 的链接是要走的路。 -
@CarlWitthoft,你为什么把它包装在
invisible中?我的 .Rprofile 中有一个几乎相同的功能:makeActiveBinding("ans", function().Last.value, .GlobalEnv) -
非常感谢 cmets:@Dason:
dir()绝对比 system("ls") 好,我没有注意到。但是这里的“ls”只是一个例子。我每天都在使用大量的常用命令,例如 system("rm foo")、system("mv foo foo1")、system("cp foo foo1"),如果我能做得更快,我将不胜感激。 @GSee:该链接确实有很大帮助,我想我可以从那里开始工作。 @CarlWitthoft:makeActiveBinding 很明确,我非常喜欢它。但是您是否知道类似的事情以便我可以将参数传递给它?我的意思是这样我就可以运行类似sys ls而不是sys(ls)的东西。 -
您的最后一个请求是要求将 空格 重新定义为函数式操作。我认为在 R 语法的上下文中这是相当不明智的。您的第一个请求似乎是扩展“$”的定义。这似乎可以说是明智的。
标签: r