返回列表的总和:错误:参数的“类型”(列表)无效

Posted

技术标签:

【中文标题】返回列表的总和:错误:参数的“类型”(列表)无效【英文标题】:Sum of returned list: Error: invalid 'type' (list) of argument 【发布时间】:2016-03-12 02:23:09 【问题描述】:

对于我的脚本,我在 R 中返回了一堆变量,在将我的脚本拆分为更多函数后,我需要返回一些列表以及其他数据。

我知道我可以通过c(value1, value2) 返回多个值。但是当返回的项目之一实际上是一个列表时,我该怎么做呢? 我要返回 listOne,但是返回时数据类型似乎发生了变化。 如何在不更改类型的情况下返回列表?

这是一个例子:

  B <- function()
   listOne <- c(1,2,3,4,5,6)
   testString <- "Test"
   return(list(listOne, testString))
 
  returnlist <- B()

根据返回的列表给变量赋值:

  copy.listOne <- returnlist# [1]
  copy.testString <- returnlist[2]

预期输出:

  listOne <- c(1,2,3,4,5,6)
  print(sum(listOne))
# [1] 21

实际输出:

  print(sum(copy.listOne))
Error in print(sum(copy.listOne)) : 
  error in evaluating the argument 'x' in selecting a method for function 'print': Error in sum(copy.listOne) : invalid 'type' (list) of argument

【问题讨论】:

使用[[returnlist[[1]],你也应该编辑上一个问题... @Lyzander谢谢!这成功了,如果你想把它写成答案,我会接受它!我实际上已经删除了另一个问题,我之前已经尝试过使用list,但后来我意识到这是因为不同的数据类型。这就是为什么我决定删除旧问题并完全重写它的原因。希望这是正确的做法。 谢谢@Bas。通常你只需要编辑你以前的问题而不是删除它然后发布一个新问题。但现在很好:)。我会发布作为答案。 【参考方案1】:

当您使用列表时,您需要使用[[ 来对它们进行子集化。在您的情况下,当您按如下方式创建函数时

  B <- function()
   listOne <- c(1,2,3,4,5,6)
   testString <- "Test"
   return(list(listOne, testString))
 
  returnlist <- B()

然后您需要使用[[ 才能访问该列表的元素。

正如您在下面看到的,现在一切正常:

> returnlist[[1]]
[1] 1 2 3 4 5 6
> returnlist[[2]]
[1] "Test"
> sum(returnlist[[1]])
[1] 21

【讨论】:

以上是关于返回列表的总和:错误:参数的“类型”(列表)无效的主要内容,如果未能解决你的问题,请参考以下文章

max(.) 中的错误:使用 dplyr dbplyr 和 bigrquery 时参数的“类型”(列表)无效

java - 错误不兼容类型:意外返回值 - 遍历列表

无效访问列表框的使用无效

Google PHP API 返回无效参数错误

向量中的错误(“列表”,n.chains):无效的“长度”参数

列表[关闭]中的无效语法