do.call error“;第二个参数必须是列表;代码在库中时使用S4Vectors
这是在另一个问题中提出的一个问题: 我收到了一个基于do.call error“;第二个参数必须是列表;代码在库中时使用S4Vectors,r,package,s4,R,Package,S4,这是在另一个问题中提出的一个问题: 我收到了一个基于do.call用法的答案,当代码是库的一部分时,它恰好不起作用,但当作为主脚本的一部分实现时,它工作得很好 下面是我尝试制作的一个简化示例: 文件示例.do.call.R: library(S4Vectors) library(test.package) data <- DataFrame(A=letters[1:6], B=LETTERS[1:6]) test_do_paste <- function(data) {
do.call
用法的答案,当代码是库的一部分时,它恰好不起作用,但当作为主脚本的一部分实现时,它工作得很好
下面是我尝试制作的一个简化示例:
文件示例.do.call.R
:
library(S4Vectors)
library(test.package)
data <- DataFrame(A=letters[1:6], B=LETTERS[1:6])
test_do_paste <- function(data) {
groups <- c("A", "B")
combined_letters <- do.call(paste, data[groups])
print(combined_letters)
}
test_do_paste(data)
#test.package::test_do_paste(data)
但是,如果切换到注释版本(使用库中的函数),则会出现以下错误:
Error in do.call(paste, data[groups]) : second argument must be a list
Calls: <Anonymous> -> do.call
Execution halted
因此,很明显,即使在这种情况下,我作为do.call的第二个参数给出的对象也不是列表
我在函数中插入了一个print(do.call)
。
从库中运行时,我只获得几行:
function (what, args, quote = FALSE, envir = parent.frame())
{
if (!is.list(args))
stop("second argument must be a list")
if (quote)
args <- lapply(args, enquote)
.Internal(do.call(what, args, envir))
}
<bytecode: 0x1b7cdd8>
<environment: namespace:base>
函数(what,args,quote=FALSE,envir=parent.frame())
{
如果(!is.list(args))
停止(“第二个参数必须是列表”)
如果(报价)
args
[1] "DataFrame"
attr(,"package")
[1] "S4Vectors"
function (what, args, quote = FALSE, envir = parent.frame())
{
if (!is.list(args))
stop("second argument must be a list")
if (quote)
args <- lapply(args, enquote)
.Internal(do.call(what, args, envir))
}
<bytecode: 0x1b7cdd8>
<environment: namespace:base>
function (what, args, quote = FALSE, envir = parent.frame())
standardGeneric("do.call")
<environment: 0x1d8c568>
attr(,"generic")
[1] "do.call"
attr(,"generic")attr(,"package")
[1] "BiocGenerics"
attr(,"package")
[1] "BiocGenerics"
attr(,"group")
list()
attr(,"valueClass")
character(0)
attr(,"signature")
[1] "what" "args"
attr(,"default")
Method Definition (Class "derivedDefaultMethod"):
function (what, args, quote = FALSE, envir = parent.frame())
{
if (!is.list(args))
stop("second argument must be a list")
if (quote)
args <- lapply(args, enquote)
.Internal(do.call(what, args, envir))
}
<bytecode: 0x1d8e660>
<environment: namespace:base>
Signatures:
what
target "ANY"
defined "ANY"
attr(,"skeleton")
(function (what, args, quote = FALSE, envir = parent.frame())
{
if (!is.list(args))
stop("second argument must be a list")
if (quote)
args <- lapply(args, enquote)
.Internal(do.call(what, args, envir))
})(what, args, quote, envir)
attr(,"class")
[1] "standardGeneric"
attr(,"class")attr(,"package")
[1] "methods"