返回列表的总和:错误:参数的“类型”(列表)无效
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 时参数的“类型”(列表)无效