gpt4 book ai didi

r - 如何将名称不为 NULL 的列表传递给 r 中 do.call 的参数

转载 作者:行者123 更新时间:2023-12-02 19:20:17 26 4
gpt4 key购买 nike

当我尝试传递名称不为 NULL 的列表时,在评估 do.call 时出现以下错误:错误:参数“x”丢失,没有默认值。是否有另一种方法可以绕过列表的名称并访问列表中的实际元素而不将名称设置为 NULL?

# with NULL names, do.call runs
num_list <- list(1:10)

do.call(mean,num_list)

# without names being NULL, do.call fails
names(num_list) <- 'a'
do.call(mean,num_list)

具体来说,我想将列表传递给函数的省略号,例如 raster::merge、https://www.rdocumentation.org/packages/raster/versions/3.3-7/topics/merge .

library(rgdal)
library(sf)
library(raster)

cities <- sf::st_read(system.file("vectors/cities.shp", package = "rgdal"))
birds <- sf::st_read(system.file("vectors/trin_inca_pl03.shp", package = "rgdal"))

sf_shapes <- list(cities, birds)

# without names works
sf_shape_extents = lapply(sf_shapes, raster::extent)
sf_max <- do.call(what = raster::merge, args = sf_shape_extents)

# with names does not
names(sf_shapes) <- c('cities', 'birds')
sf_shape_extents_names = lapply(sf_shapes, raster::extent)
sf_max_names <- do.call(what = raster::merge, args = sf_shape_extents)

最佳答案

您可以确保传入的列表的名称与函数的参数相对应,或者该列表未命名并且列表元素的位置与相关参数的位置相对应。

names(num_list) <- 'x'
do.call(mean,num_list)
[1] 5.5

names(num_list) <- 'a'
do.call(mean,unname(num_list))
[1] 5.5

编辑:

我在您编辑的版本中没有看到任何结构变化。该错误是由于名称造成的,因为它们与函数的命名参数不对应。您正在传递命名参数,这将引发错误。您需要问自己的问题是您打算使用的函数的参数名称是什么?如果函数的省略号接受未命名的参数,那么传入的参数是否命名都没有关系。例如,R 中的 paste 函数:

a <- list(a="a",b=3,c="d");
do.call(paste,a)
[1] "a 3 d"

关于r - 如何将名称不为 NULL 的列表传递给 r 中 do.call 的参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63163697/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com