Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.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_Loops - Fatal编程技术网

R 缺少参数,没有默认值,但仅在循环中

R 缺少参数,没有默认值,但仅在循环中,r,loops,R,Loops,我编写了两个简单的自定义函数,目的是将它们合并到一个特定的函数中 这些用于对数据进行子集划分。第一个不太具体: unspecific_subsetting=function(x,var1,var2){ subset(x, x$COL1 %in% var1 & x$COL2 %in% var2 & x$COL3 %in% "A") } 在x$COL3中,我放置了“A”,因为它是常量。第二个更具体,它做完全相同的事情,但它只包含选定的行:

我编写了两个简单的自定义函数,目的是将它们合并到一个特定的函数中

这些用于对数据进行子集划分。第一个不太具体:

unspecific_subsetting=function(x,var1,var2){
  subset(x, x$COL1 %in% var1 
         & x$COL2 %in% var2
         & x$COL3 %in% "A")
}
x$COL3
中,我放置了
“A”
,因为它是常量。第二个更具体,它做完全相同的事情,但它只包含选定的行:

specific_subsetting=function(x,var1,var2,year){
  subset(x, x$COL1 %in% var1  
         & x$COL2 %in% var2
         & x$COL3 %in% "A"
         & x$COL4 %in% (year+1))
}
我写了
(year+1)
,但稍后我可能也会将其更改为variable。我使用的最后一个函数是简单的百分比变化:

pcchange=function(x){  c( NA, diff(x)/x[-length(x)] ) }
所以现在是时候解释了——我希望将所有这些函数组合成一个方便的函数,它计算某些减分数据集的百分比变化,然后从所选行返回pcchange值。看起来是这样的:

big_function=function(x,var1,var2,year){
  x=unspecific_subsetting(x, var1, var2)
  x=data.frame(x,"growth"=(pcchange(x$COLn)*100))
  x=getforecast(x,var1,var2,year)}
for (i in 1:length(df.names.list)){
assign(NEW.df.names.list[i],big_function(get(df.names.list[i])),var1,var2,year.list[i])}
COL1    COL2        COL3    COL4    COLn
CarBrand1   Gas        A    2014    5.34
CarBrand1   Gas        A    2010    1.46
CarBrand1   Gas        A    2007    1.18
CarBrand1   Diesel     A    2006    1.27
CarBrand1   Electric   A    2013    1.78
CarBrand1   Electric    A   2001    1.44
CarBrand2   Electric    A   2007    1.39
CarBrand2   Diesel      A   2004    1.04
CarBrand2   Gas         A   2009    1.89
CarBrand2   Gas         A   2004    1.83
CarBrand2   Electric    A   2000    1.69
CarBrand2   Electric    A   2001    1.61
CarBrand2   Electric    A   2013    1.29
CarBrand2   Diesel      A   2001    2.00
CarBrand2   Diesel      A   2006    1.78
CarBrand2   Gas         A   2010    1.10
CarBrand2   Gas         A   2002    1.51
CarBrand2   Gas         A   2012    1.78
CarBrand2   Electric    A   2009    1.84
CarBrand3   Gas         A   2013    1.24
CarBrand3   Gas         A   2009    1.98
CarBrand3   Gas         A   2015    1.91
CarBrand3   Gas         A   2007    1.14
CarBrand3   Diesel      A   2000    1.54
CarBrand3   Diesel      A   2013    1.60
newdf=0
output=0
NEW.df.names.list=c("output")
df.names.list=c("mydf")
year.list=2012
for (i in 1:length(df.names.list)){
  assign(NEW.df.names.list[i],big_function(get(df.names.list[i])),"CarBrand3","Diesel",year.list[i])}
更具体地说,它基本上是对数据的某些部分进行子集化,然后计算并向df添加带有pcchanges的新列,最后返回所需的行。这个功能有效。而且很有魅力。当我把它放入循环时,问题就开始了。到目前为止,我是基于列表编写循环的,所以看起来是这样的:

big_function=function(x,var1,var2,year){
  x=unspecific_subsetting(x, var1, var2)
  x=data.frame(x,"growth"=(pcchange(x$COLn)*100))
  x=getforecast(x,var1,var2,year)}
for (i in 1:length(df.names.list)){
assign(NEW.df.names.list[i],big_function(get(df.names.list[i])),var1,var2,year.list[i])}
COL1    COL2        COL3    COL4    COLn
CarBrand1   Gas        A    2014    5.34
CarBrand1   Gas        A    2010    1.46
CarBrand1   Gas        A    2007    1.18
CarBrand1   Diesel     A    2006    1.27
CarBrand1   Electric   A    2013    1.78
CarBrand1   Electric    A   2001    1.44
CarBrand2   Electric    A   2007    1.39
CarBrand2   Diesel      A   2004    1.04
CarBrand2   Gas         A   2009    1.89
CarBrand2   Gas         A   2004    1.83
CarBrand2   Electric    A   2000    1.69
CarBrand2   Electric    A   2001    1.61
CarBrand2   Electric    A   2013    1.29
CarBrand2   Diesel      A   2001    2.00
CarBrand2   Diesel      A   2006    1.78
CarBrand2   Gas         A   2010    1.10
CarBrand2   Gas         A   2002    1.51
CarBrand2   Gas         A   2012    1.78
CarBrand2   Electric    A   2009    1.84
CarBrand3   Gas         A   2013    1.24
CarBrand3   Gas         A   2009    1.98
CarBrand3   Gas         A   2015    1.91
CarBrand3   Gas         A   2007    1.14
CarBrand3   Diesel      A   2000    1.54
CarBrand3   Diesel      A   2013    1.60
newdf=0
output=0
NEW.df.names.list=c("output")
df.names.list=c("mydf")
year.list=2012
for (i in 1:length(df.names.list)){
  assign(NEW.df.names.list[i],big_function(get(df.names.list[i])),"CarBrand3","Diesel",year.list[i])}
因此,正如您所看到的,我正在尝试创建新的dfs,每个dfs只包含选定的行(顺便说一句:我知道我的“子集”函数在
big\u函数中重叠,但我不介意)。这将返回一个错误:

  Error in unspecific_subsetting(x, var1, var2) : 
  argument "var1" is missing, with no default

我检查过,这个问题考虑了每个函数中的每一个参数,它只返回了第一个R。


我完全不知道这里的问题是什么,我用过几次类似的循环,从来没有这样的结果

我设法重现了测试数据上的错误。我的测试结果如下所示:

big_function=function(x,var1,var2,year){
  x=unspecific_subsetting(x, var1, var2)
  x=data.frame(x,"growth"=(pcchange(x$COLn)*100))
  x=getforecast(x,var1,var2,year)}
for (i in 1:length(df.names.list)){
assign(NEW.df.names.list[i],big_function(get(df.names.list[i])),var1,var2,year.list[i])}
COL1    COL2        COL3    COL4    COLn
CarBrand1   Gas        A    2014    5.34
CarBrand1   Gas        A    2010    1.46
CarBrand1   Gas        A    2007    1.18
CarBrand1   Diesel     A    2006    1.27
CarBrand1   Electric   A    2013    1.78
CarBrand1   Electric    A   2001    1.44
CarBrand2   Electric    A   2007    1.39
CarBrand2   Diesel      A   2004    1.04
CarBrand2   Gas         A   2009    1.89
CarBrand2   Gas         A   2004    1.83
CarBrand2   Electric    A   2000    1.69
CarBrand2   Electric    A   2001    1.61
CarBrand2   Electric    A   2013    1.29
CarBrand2   Diesel      A   2001    2.00
CarBrand2   Diesel      A   2006    1.78
CarBrand2   Gas         A   2010    1.10
CarBrand2   Gas         A   2002    1.51
CarBrand2   Gas         A   2012    1.78
CarBrand2   Electric    A   2009    1.84
CarBrand3   Gas         A   2013    1.24
CarBrand3   Gas         A   2009    1.98
CarBrand3   Gas         A   2015    1.91
CarBrand3   Gas         A   2007    1.14
CarBrand3   Diesel      A   2000    1.54
CarBrand3   Diesel      A   2013    1.60
newdf=0
output=0
NEW.df.names.list=c("output")
df.names.list=c("mydf")
year.list=2012
for (i in 1:length(df.names.list)){
  assign(NEW.df.names.list[i],big_function(get(df.names.list[i])),"CarBrand3","Diesel",year.list[i])}
前两列是汽车品牌和发动机类型,第三列是常数,第四列是年份,最后一列是随机值。我将自定义函数完全像第一篇文章一样放入R中,因此我的测试代码如下所示:

big_function=function(x,var1,var2,year){
  x=unspecific_subsetting(x, var1, var2)
  x=data.frame(x,"growth"=(pcchange(x$COLn)*100))
  x=getforecast(x,var1,var2,year)}
for (i in 1:length(df.names.list)){
assign(NEW.df.names.list[i],big_function(get(df.names.list[i])),var1,var2,year.list[i])}
COL1    COL2        COL3    COL4    COLn
CarBrand1   Gas        A    2014    5.34
CarBrand1   Gas        A    2010    1.46
CarBrand1   Gas        A    2007    1.18
CarBrand1   Diesel     A    2006    1.27
CarBrand1   Electric   A    2013    1.78
CarBrand1   Electric    A   2001    1.44
CarBrand2   Electric    A   2007    1.39
CarBrand2   Diesel      A   2004    1.04
CarBrand2   Gas         A   2009    1.89
CarBrand2   Gas         A   2004    1.83
CarBrand2   Electric    A   2000    1.69
CarBrand2   Electric    A   2001    1.61
CarBrand2   Electric    A   2013    1.29
CarBrand2   Diesel      A   2001    2.00
CarBrand2   Diesel      A   2006    1.78
CarBrand2   Gas         A   2010    1.10
CarBrand2   Gas         A   2002    1.51
CarBrand2   Gas         A   2012    1.78
CarBrand2   Electric    A   2009    1.84
CarBrand3   Gas         A   2013    1.24
CarBrand3   Gas         A   2009    1.98
CarBrand3   Gas         A   2015    1.91
CarBrand3   Gas         A   2007    1.14
CarBrand3   Diesel      A   2000    1.54
CarBrand3   Diesel      A   2013    1.60
newdf=0
output=0
NEW.df.names.list=c("output")
df.names.list=c("mydf")
year.list=2012
for (i in 1:length(df.names.list)){
  assign(NEW.df.names.list[i],big_function(get(df.names.list[i])),"CarBrand3","Diesel",year.list[i])}

我在多个dfs上工作,这只会导致on循环,但它会给我完全相同的错误。我知道这并不是完全回答我自己的问题,它更像是扩展…

你能提供一些数据吗?首先要检查的是:当错误发生时,你在
var1
中有什么?我使用“回答你的问题”使文章更容易写。