【问题标题】:looping a function and changing only one argument variable with each iteration循环一个函数,每次迭代只改变一个参数变量
【发布时间】:2019-07-26 07:20:07
【问题描述】:

我试图弄清楚如何循环一个函数,以便它改变函数中的一个参数以匹配列表中的变量

data=mtcars
carb=4
list<-list(1,2,4,5,6)

func<-function(data, cyln, carbn){
  a<-data%>%group_by(cyl==cyln,carb==carbn)%>%count
  print(a)
}

function(mtcars,list,4)...or something where cyl takes its value from the list. 

我基本上是在尝试让函数向我显示列表中包含的每个不同气缸的计数 (a)。

因此,要打印 1 cyl、4 carb 的单个计数; 2 缸,4 碳水化合物; 4 缸,4 碳水化合物; 5 缸,4 碳水化合物; 6 缸,4 碳水化合物。

我想不出一种方法来将列表应用到函数中,这样我就可以改变圆柱体参数/变量

任何帮助表示赞赏

为清楚起见编辑:

我想要做的是循环,以便函数在每次迭代时从列表中获取一个新元素。每个循环的函数内部都是这样的:

a<-data%>%group_by(cyl==1, carb)%>%count 
  print(a)

第二个是

a<-data%>%group_by(cyl==2, carb)%>%count
  print(a)

第三个是

a<-data%>%group_by(cyl==4,carb)%>%count
   print(a)

并且 1、2、4(cyl)来自列表,而另一个变量(carb)在 4 处保持静态。

【问题讨论】:

    标签: r function loops arguments


    【解决方案1】:

    您可以使用sapply 遍历包含cyl 值的向量的每个元素。例如:

    sapply(c(1,2,4,5,6), function(x)
      nrow(subset(mtcars, cyl == x & carb == 4)))
    
    [1] 0 0 0 0 4
    

    我假设您只是使用 mtcars 作为示例数据,因为该数据集中 cyl 的唯一值是 4、6、8,并且只有 cyl = 6, carb = 4 返回值 > 0。

    【讨论】:

    • 这在这里有效,但它没有使用创建的函数来应用列表中的数字。这是一个示例函数,因为使用 im 使用的实际函数创建一个 reprex 太麻烦了。有没有办法在函数中设置 cyl == x 并让 x = 列表,并迭代以在每次迭代的新行上打印输出?
    • 您的示例函数有很多错误。例如:您不能在列表中使用group_by,并且您没有为count 提供任何参数。通常,如果您的问题与您要解决的问题尽可能接近,它会对其他人有所帮助。
    • 该列表是我想要迭代列表元素的位置,第一个是:a&lt;-data%&gt;%group_by(cyl==1, carb)%&gt;%count, print(a),第二个是 a&lt;-data%&gt;%group_by(cyl==2, carb)%&gt;%count, print(a),第三个是 a&lt;-data%&gt;%group_by(cyl==4,carb)%&gt;%count, print(a) 和 1, 2, 3 来自列表,而另一个变量 (carb) 在 4 处保持不变。我将添加到原始帖子中以便我可以格式化
    • 找到了使用地图的解决方案:map(list, ~ func(data = mtcars, cyln = ., carbn = 4))
    【解决方案2】:

    reddit 用户和另一个人给了我这个解决方案,效果很好! :

    尝试使用 purrr 库中的 map 而不是循环。您可以将虚拟参数插入函数 (.) 以表示正在更改的值,并根据需要设置数据和碳。请记住在函数前使用波浪号 (~),以便将其视为公式。

    map(list, ~ func(data = mtcars, cyln = ., carbn = 4))
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-12-01
      • 2018-12-27
      • 1970-01-01
      • 2021-08-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多