以下是重新创建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”组件的细分:
我猜这个错误是由于缺乏回收。我需要以不同方式格式化数据框吗?我需要重写函数'sF2'吗?我一整天都在旋转着,没有成功。请帮助纠正此错误。
提前致谢
答案 0 :(得分: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])
会返回一个可以回收的载体