Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/74.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
do.call error“;第二个参数必须是列表;代码在库中时使用S4Vectors_R_Package_S4 - Fatal编程技术网

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"