【发布时间】:2017-06-14 17:16:26
【问题描述】:
我正在尝试在函数中使用数据框的内容,这是我的问题的简化示例。
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
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] 中的错误:维数不正确
由于某种原因,数据框被转换为其第一列的向量。如何阻止这种情况发生,并使我的函数可以访问整个数据框?
我正在尝试选择数据帧的一个子集并根据函数的其他两个参数返回它,这就是为什么我需要将整个数据帧传递给函数。
【问题讨论】:
-
您希望得到什么结果? - 作为第一次尝试,尝试从函数中的
q索引中删除逗号(即return(x+y+q[2])) -
我认为我的问题过于简单化了,我已经对其进行了编辑,希望能将其弄清楚一点。由于某些我不理解的默认行为,从 q 索引中删除逗号只会从来自我的数据框第一列的向量中选择第二个元素,这对我没有帮助,因为我需要访问第 n 个数据帧的列进行比较操作,数据帧的其余部分返回它。
-
这个函数的预期输出是什么?
-
data[, singe_column]将返回一个向量。您可以使用data[single_column]或data[, single_column, drop = FALSE]返回一个数据框。这本质上是R-FAQ 7.5 -
也就是说,您似乎也没有做任何事情来确保您绑定在一起的向量具有相同的长度,因此也可能导致问题。
标签: r dataframe mapply custom-function