好的
A <- c(1:10)
B <- c(2:11)
C <- c(3:12)
df1 <- data.frame(A,B,C)
我不明白这个错误:
df2 <- df1 / df1[,"C"]
df2 <- df1[1:3,] / df1[1:3,"C"]
a <- subset (df1, select = c(A, B))
b <- subset (df1, select = c (C))
c <- a/b
## Error in Ops.data.frame(a, b) :
## ‘/’ only defined for equally-sized data frames
看到两者的行数相同:
dim(a)
dim(b)
答案 0 :(得分:6)
当矩阵索引的使用导致大小为1(即一行或一列)的维度时,R会自动删除维度(除非您明确指定drop=FALSE
),但使用subset()
数据帧总是产生一个数据帧(即使它只有一列):
> str(b)
'data.frame': 10 obs. of 1 variable:
$ C: int 3 4 5 6 7 8 9 10 11 12
> str(df1[,"C"])
int [1:10] 3 4 5 6 7 8 9 10 11 12
因此除以df1[,"C"]
除以数字(整数)向量而不是数据帧。错误‘/’ only defined for equally-sized data frames
表示两个数据框应完全大小相同(行数和列相同)。
sweep(df1,df1[,"C"],MARGIN=1,"/")
可能更安全。
答案 1 :(得分:1)
由于它们的大小不同,即列数不同,因此会产生错误。
以下将a
分为b
c <- a/b$C