0

我正在尝试在函数中使用数据框的内容,这是我的问题的简化示例。

df <- data.frame(v1=1:10,v2=23:32)
df2 <- data.frame(v1=1:3,v2=3:5)

fxm <- function(x,y,q)
{
    return(cbind(q[q[,2]==x,],y))
}

mapply(fxm,df[,1],df[,2],q=df2)

q[, 2] 中的错误:维数不正确

如果我添加打印语句: df <- data.frame(v1=1:10,v2=23:32) df2 <- data.frame(v1=1:3,v2=3:5)

fxm <- function(x,y,q)
{
    print(q)
    return(cbind(q[q[,2]==x,],y))
}

mapply(fxm,df[,1],df[,2],q=df2)

我得到:

[1] 1 2 3

q[, 2] 中的错误:维数不正确

由于某种原因,数据框被转换为其第一列的向量。如何阻止这种情况发生,并使我的函数可以访问整个数据框?

我正在尝试选择数据帧的子集并根据函数的其他两个参数返回它,这就是为什么我需要将整个数据帧传递给函数的原因。

4

1 回答 1

0

如果我理解正确,您希望将整个内容q = df2传递给fxm您定义的函数,对吗?

问题是在您的代码mapply中将提取元素q = df2作为一些附加参数,就像从df[,1]和提取元素一样df[,2]。您需要设置MoreArgs参数mapply以将整个内容传递给函数,如下所示:

df <- data.frame(v1=1:10,v2=23:32)
df2 <- data.frame(v1=1:3,v2=3:5)

fxm <- function(x,y,q)
{
    print(q)
    return(cbind(q[q[,2]==x,],y))
}

mapply(fxm,df[,1],df[,2], MoreArgs = list(q=df2))

这仍然对我不起作用,并且在其他地方存在一些错误。从打印结果可以看到整个data.frame打印出来,解决了你原来的问题。

于 2017-06-14T18:59:32.723 回答