【问题标题】:R equivalent of python star unpacking?R相当于python星解包?
【发布时间】:2019-08-12 13:19:28
【问题描述】:

我在 R 中有一个接受可变数量参数的例程,我需要调用这个例程并传递一个解压缩列表。在python中我会做

lst = [1,2,3]
my_func(*lst)

R 中的等价语法是什么?

更具体地说,我正在使用闪亮,我正在尝试创建一个动态的条目列表

这是代码。

server <- function(input, output) {
  applist <- c(
      a(href="#", class="list-group-item", 
        h4(class="list-group-item-heading", "Entry 1"),
        p(class="list-group-item-text", "Description")
      ),
      a(href="#", class="list-group-item", 
        h4(class="list-group-item-heading", "Entry 2"),
        p(class="list-group-item-text", "Description")
      ))
   
  output$applist = renderUI(
    div(class="list-group", ... applist)
  )
}

【问题讨论】:

  • 您可以使用 3 个点 ... 并传递任意数量的参数,但 R 中没有 ** 的字典。方式相同
  • 这是div(class="list-group", ... applist) 你正在使用的地方还是我认为你有一个功能。如果是函数的参数,可能需要do.call("functionname", arguments_to_function_in_a_list)
  • 你可以使用do.call(fun, list_of_args) (base R)。或者试试this (tidyverse)。
  • 我没有作为答案发布,因为l 作为l &lt;- list(x = 1, y = 2, z = 3),这可以f &lt;- function(x, y, z){ x + y + z }; do.call(f, l) 但这不是f &lt;- function(...){ x + y + z }; do.call(f, l),我认为后者就是这个问题的意义所在.不确定是否有办法进行修改以使其正常工作。您可以通过添加inputs &lt;- list(...) 作为定义的第一行然后使用inputs$x 等来修改函数,但也许有更简单的方法?
  • @StefanoBorini 在这里,您提供了vector,即c(...)。对于list,它是list(...),但您可以使用as.list(c(...)) 将矢量转换为光照

标签: r


【解决方案1】:

由 OP 发布。

这是我的解决方法。使用do.call 可以解决问题,但您必须注意,python 中的列表与 R 中的列表不同。R 中的列表更类似于字典和列表的混合。

  applist <- list(
      class="list-group",
      a(href="#", class="list-group-item"),
      a(href="#", class="list-group-item")
  )

  output$applist = renderUI(do.call(div, applist))

注意应用列表如何同时包含命名条目class 和未命名条目。正如我所说,混合动力车。 do.call 然后进行“解包”,但 applist 的内容随后作为命名或非命名参数分发。它与 python 的工作方式不同,其中命名和非命名总是分开的。

【讨论】:

    猜你喜欢
    • 2011-06-25
    • 1970-01-01
    • 2012-12-03
    • 2014-10-31
    • 2017-09-10
    • 2016-03-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多