1

我希望有一个可以一次性粘贴到 R 中的脚本。理想情况下,该脚本将具有穿插各种功能的代码行。但是到目前为止,我必须一次粘贴一些代码,因为(正如我所写的那样)这些函数在与下面的代码同时运行时将不起作用。

对于下面的代码,我想让用户输入初始数据,然后对其进行计算。因为我不能连续运行多个“readline”调用,所以我将它们封装到一个名为 Define 的函数中。但是,如果我一次将其粘贴到 R 中,则以下代码将不起作用。

Define<-function(){
N<-readline("EnterDeployment #  ")
Y<-as.numeric(readline("What Year was the Deployment?   "))
L<-as.numeric(readline("What is the Distance?   "))

return(list("Year"=Y,"Name"=N, "Length"=L))     
}

Def<-Define()

Name<-Def$Name
Year<-Def$Year
L<-Def$Length

readline(paste("UPDN=",Name,"Year=",Year,"Distance=",L,"If this is correct press Return", sep=" "))


D<-L/4
F<-D*5

但是如果我把它分成几个部分,它就可以了。有没有办法将单个或多个函数合并到一行代码中?

4

1 回答 1

5

我认为没有理由不在函数中包含其他步骤。这将解决问题并更整洁恕我直言。

FOO <- function() {
  Define<-function(){
    N<-readline("EnterDeployment #  ")
    Y<-as.numeric(readline("What Year was the Deployment?   "))
    L<-as.numeric(readline("What is the Distance?   "))

    list("Year"=Y,"Name"=N, "Length"=L)
  }
  Def<-Define()

  Name<-Def$Name
  Year<-Def$Year
  L<-Def$Length

  readline(paste("UPDN=",Name,"Year=",Year,"Distance=",L,
                 "If this is correct press Return",    
                 sep=" "))

  D<-L/4
  F<-D*5
  list(D = D, F = F)
}

我们使用的有:

> FOO()
EnterDeployment #  12
What Year was the Deployment?   2012
What is the Distance?   54
UPDN= 12 Year= 2012 Distance= 54 If this is correct press Return
$D
[1] 13.5

$F
[1] 67.5

当然,您需要包含source().R文件FOO(),但这没问题。

为什么这更可取?好吧,封装这样一个函数中涉及的所有步骤会更整洁。您也不会污染作为中间步骤创建的对象。最后,如果将其传递给其他用户,您可以将其打包为 R 包(您不需要编写文档 - 只需添加一个基本.Rd文件)。

于 2013-03-26T22:59:18.730 回答