0

以下是产生以下错误的 A 数据框和 A 函数的重新创建:

Error in Ops.data.frame(sF1(x1, x2, x3, x4), sF1(x1, x2, 0, x4)) (from #2) : 
          - only defined for equally-sized data frames"

数据框

S <- rep(c(1,2), each=1536)
D <- rep(c(0,2,4,6,8,10,15,20,30,40,45,50,55,60,65,70,80,85,90,92,94,96,98,100), each=16,times=16)
K <- rep(c("K", "Y","M","C"), each= 384, times=4)
I <- rep(c("A", "S"), each=3072)
Data <- rnorm(6144)
DataFrame <- cbind.data.frame(S,D,K,I,Data)

我创建了两个函数,每个函数都有相同的四个参数

sF1 <-  function(x1,x2,x3,x4) subset(DataFrame, I == x1 & K == x2 & D == x3 & S==x4, select = "Data")

sF2 <- function(x1,x2,x3,x4){
    (100* (1-10^-(sF1(x1,x2,x3,x4) - sF1(x1,x2,0,x4))) /
     (1-10^-(sF1(x1,x2,100,x4)- sF1(x1,x2,0,x4)))) - x3}

函数 'sF1' 运行没有问题

sF1(I,K,D,S)

在第二个函数 'sF2' 产生上述错误

sF2(I,K,D,S)

以下是“sF2”组件的细分:

  • sF1(x1,x2,x3,x4) 有 5632 行
  • sF1(x1,x2,0,x4) 有 256 行,我预计它会回收 22 次
  • sF1(x1,x2,100,x4) 也有 256 行,我预计它会回收 22 次

我猜这个错误是由于缺乏回收。我需要以不同的方式格式化我的数据框吗?我需要重写函数'sF2'吗?我整天都在旋转我的轮子,但没有成功。请帮助纠正这个错误。

提前致谢

4

1 回答 1

2

subset不推荐用于程序化使用。改为使用[

话虽这么说,假设您想从 data.frame 返回单列,如果您不保留data.frame该类(哪个子集确实或[..., ,drop = FALSE]将要保留,那么回收将按您的预期工作。

我不清楚你真的想要==,不是I%in%(unique(x1)或类似的(但会留作练习

你可以重新定义

sF1 <-  function(x1,x2,x3,x4) with(DataFrame, Data[I == x1 & K == x2 & D == x3 & S==x4])

这将返回一个将回收的向量

于 2013-03-15T00:56:19.570 回答