好的
A <- c(1:10)
B <- c(2:11)
C <- c(3:12)
df1 <- data.frame(A,B,C)
Run Code Online (Sandbox Code Playgroud)
我不明白这个错误:
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
Run Code Online (Sandbox Code Playgroud)
看到两者的行数相同:
dim(a)
dim(b)
Run Code Online (Sandbox Code Playgroud)
drop=FALSE当矩阵索引的使用导致大小为1的维度(即,一行或一列)时,R会自动删除维度(除非您明确指定),但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
Run Code Online (Sandbox Code Playgroud)
因此,除以df1[,"C"]除以数字(整数)向量而不是数据帧.该错误‘/’ only defined for equally-sized data frames意味着两个数据帧应该具有完全相同的大小(相同的行数和列数).
sweep(df1,df1[,"C"],MARGIN=1,"/") 可能更安全.