在R脚本中包含一个函数

时间:2013-03-26 22:13:44

标签: r function

我希望有一个我可以一次粘贴到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

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

1 个答案:

答案 0 :(得分: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的{​​{1}}文件,但这没问题。

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