Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/78.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 在函数中更改值_R_Function - Fatal编程技术网

R 在函数中更改值

R 在函数中更改值,r,function,R,Function,我有以下功能,工作正常: d16<-function(x) { delay<-difftime(tail(x$date.time[x$station == "L4"],1), x$date.time[x$station == "L4"][1],units="mins") return (delay) } 我认为这可能对你有用,因为看起来你只是在为每个站点计算时间。您需要先运行install.packagesdata.table 这里有一个例子。

我有以下功能,工作正常:

d16<-function(x) {
  delay<-difftime(tail(x$date.time[x$station == "L4"],1),
              x$date.time[x$station == "L4"][1],units="mins")

  return (delay)
}

我认为这可能对你有用,因为看起来你只是在为每个站点计算时间。您需要先运行install.packagesdata.table

这里有一个例子。有了这些数据

set.seed(1)
x <- data.frame(
    date.time=sample(seq.Date(as.Date("2013-05-18"),as.Date("2013-06-02"),1),10),
    station=rep(c("A","B"),5),
    stringsAsFactors=FALSE
)
可能您的数据已经排序,因此延迟将始终具有相同的符号,但如果没有,您可以为数据表设置键,并且列将按它们排序:setkeydt、station、date.time

要获得difftimes矩阵,可以使用基本R函数:

不幸的是,difftime提供了奇怪的输出,因此要在行为良好的data.frame中获得此信息,我们需要使用一个新函数:

my_difftime <- Vectorize(function(x,y)difftime(x,y,units="mins")[[1]])
diffs <- as.data.frame(outer(firsts,lasts,my_difftime))

此矩阵中的每个条目都显示了行桩号的第一次观测与列桩号的最后一次观测之间的差异时间。

我认为这可能对您有用,因为看起来您只是在为每个桩号计算差异时间。您需要先运行install.packagesdata.table

这里有一个例子。有了这些数据

set.seed(1)
x <- data.frame(
    date.time=sample(seq.Date(as.Date("2013-05-18"),as.Date("2013-06-02"),1),10),
    station=rep(c("A","B"),5),
    stringsAsFactors=FALSE
)
可能您的数据已经排序,因此延迟将始终具有相同的符号,但如果没有,您可以为数据表设置键,并且列将按它们排序:setkeydt、station、date.time

要获得difftimes矩阵,可以使用基本R函数:

不幸的是,difftime提供了奇怪的输出,因此要在行为良好的data.frame中获得此信息,我们需要使用一个新函数:

my_difftime <- Vectorize(function(x,y)difftime(x,y,units="mins")[[1]])
diffs <- as.data.frame(outer(firsts,lasts,my_difftime))

此矩阵中的每个条目都显示了行桩号的第一次观测与列桩号的最后一次观测之间的时间差。

看起来您只是在问如何在函数中包含变量参数

解决办法是:

步骤1:在函数中包含一个变量。。。 步骤2:将函数中的值替换为变量 步骤3:调用函数时,提供适当的值 例如:

d <- function (x,  var) { 
###                 ^^^    Variable incliuded

  delay<-difftime(tail(x$date.time[x$station == var],1),
###         replace the value with variable name ^^^   

              x$date.time[x$station == var][1],units="mins")
###  ... everywhere the value appears   ^^^^

  return (delay)
}
您可以根据需要使用任意多的变量。例如:

d <- function (x,  var1, var2) 
  {  ..<do something with var1 and var2>.. }

请注意,在实际使用每个变量之前,R不会对其值进行求值检查,这就是为什么这样做的原因,但是,在求值var2之前,请确保不要更改函数中var1的值。看起来,您只是在问如何在函数中包含变量参数

解决办法是:

步骤1:在函数中包含一个变量。。。 步骤2:将函数中的值替换为变量 步骤3:调用函数时,提供适当的值 例如:

d <- function (x,  var) { 
###                 ^^^    Variable incliuded

  delay<-difftime(tail(x$date.time[x$station == var],1),
###         replace the value with variable name ^^^   

              x$date.time[x$station == var][1],units="mins")
###  ... everywhere the value appears   ^^^^

  return (delay)
}
您可以根据需要使用任意多的变量。例如:

d <- function (x,  var1, var2) 
  {  ..<do something with var1 and var2>.. }

请注意,在实际使用每个变量之前,R不会对其值进行求值检查,这就是为什么这样做的原因,但在求值var2之前,请确保不要更改函数中var1的值。

编写一个具有两个参数的函数。。。?想写一个有两个参数的函数吗。。。?像d_fun一样,是的,这很好,以前没有见过,但是我不总是看延迟,我也看两个不同站点之间的difftime,因此原始函数中的值可能不相同:'tm1Ah,在这种情况下,您将希望使用Ricardo描述的方法,并将其扩展为有三个参数:functionx,station1,站点2=站点1。这将允许您继续使用单个函数。当你没有为station2传递任何信息时,它将自动接受station1=station2。@Salmosalar好的,我已经编辑了我的答案,以解决所有成对的站点。我知道这是如何工作的,很好!!然而,我似乎无法将输出放入数据帧?此外,我最初使用sapply在一个列表中运行代码,再次努力将您的答案输入到函数中,这样做……意识到我最终提出了更多的问题。编辑原文并举例说明data@Salmosalar是的,我没有意识到外部输出是如此奇怪。我在最后添加了另一个想法。是的,这很好,以前没有见过,但是我不总是看延迟,我也看两个不同站点之间的difftime,因此原始函数中的值可能不相同:'tm1Ah,在这种情况下,您将要使用Ricardo描述的方法,并将其扩展为具有三个参数:functionx、station1、station2=station1。这将允许您继续使用单个函数。当你没有为station2传递任何信息时,它将自动接受station1=station2。@Salmosalar好的,我已经编辑了我的答案,以解决所有成对的站点。我知道这是如何工作的,很好!!然而,我似乎无法将输出放入数据帧?此外,我最初使用sapply在一个列表中运行代码,再次努力将您的答案输入到函数中,这样做……意识到我最终提出了更多的问题。编辑原文并举例说明data@Salmosalar是的,我没有意识到外部输出是如此奇怪。我在最后补充了另一个想法。也许你可以把你的答案扩展到OP-com上
在不同的车站上方安装。顺便说一句,你曾经说过val而不是var。是的,我知道这一点,但是我没有想到调用多达100个函数,而这些函数几乎就是same@Salmosalar,如果你已经知道了,那么问题是什么?你想完成什么你做不到的事情?@Salmosalar看起来Ricardo建议你使用一个函数——你自己的d版本——然后迭代或者*应用sapply,lapply,。。。它超过了你的~100个函数参数。也许你可以扩展你的答案以涵盖OP在不同站点上评论的情况。顺便说一句,你曾经说过val而不是var。是的,我知道这一点,但是我没有想到调用多达100个函数,而这些函数几乎就是same@Salmosalar,如果你已经知道了,那么问题是什么?你想完成什么你做不到的事情?@Salmosalar看起来Ricardo建议你使用一个函数——你自己的d版本——然后迭代或者*应用sapply,lapply,。。。它覆盖了约100个函数参数。
my_difftime <- Vectorize(function(x,y)difftime(x,y,units="mins")[[1]])
diffs <- as.data.frame(outer(firsts,lasts,my_difftime))
          L4          L5         R05
L4     -1.70 -37522.1667 -37367.6667
L5  36988.75   -531.7167   -377.2167
R05 37365.97   -154.5000      0.0000
d <- function (x,  var) { 
###                 ^^^    Variable incliuded

  delay<-difftime(tail(x$date.time[x$station == var],1),
###         replace the value with variable name ^^^   

              x$date.time[x$station == var][1],units="mins")
###  ... everywhere the value appears   ^^^^

  return (delay)
}
d(x, "L5")
d(x, "L4")
...
etc
d <- function (x,  var1, var2) 
  {  ..<do something with var1 and var2>.. }
d <- function (x,  var1, var2=var1) 
  {  ..<do something with var1 and var2>.. }