我一直在研究这个程序很多天,并决定今天重写它....
但这个问题一直困扰着我。
我认为csm[1,]
和Prank[1,]
具有相同的维度。
谁可以帮我解决这个问题?
Prank<-read.csv("result.csv")
nrP<-nrow(Prank)
ncP<-ncol(Prank)
csm<-matrix(0,nrP*3,ncP)
ccsm<-matrix(0,nrP*3,ncP)
nrC<-nrow(csm)
ncC<-ncol(csm)
nrP
[1] 30
ncP
[1] 144
nrC
[1] 90
ncC
[1] 144
Prank[1,]
P1 P2 P3 P4 P5 P6 P7 P8 P9 P10 P11 P12 P13 P14 P15 P16 P17 P18 P19 P20 P21 P22 P23 P24 P25 P26 P27 P28 P29 P30 P31 P32
1 4 2 3 1 4 2 3 1 4 2 3 1 3 1 4 2 4 2 3 1 4 1 3 2 4 1 3 2 4 2 3 1
P33 P34 P35 P36 P37 P38 P39 P40 P41 P42 P43 P44 P45 P46 P47 P48 P49 P50 P51 P52 P53 P54 P55 P56 P57 P58 P59 P60 P61
1 4 1 3 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
P62 P63 P64 P65 P66 P67 P68 P69 P70 P71 P72 P73 P74 P75 P76 P77 P78 P79 P80 P81 P82 P83 P84 P85 P86 P87 P88 P89 P90
1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
P91 P92 P93 P94 P95 P96 P97 P98 P99 P100 P101 P102 P103 P104 P105 P106 P107 P108 P109 P110 P111 P112 P113 P114 P115
1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
P116 P117 P118 P119 P120 P121 P122 P123 P124 P125 P126 P127 P128 P129 P130 P131 P132 P133 P134 P135 P136 P137 P138
1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
P139 P140 P141 P142 P143 P144
1 0 0 0 0 0 0
csm[1,]
[1] 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
[59] 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
[117] 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
csm[1,]<-Prank[1,]
csm[1,]
Error in csm[1, ] : incorrect number of dimensions
答案 0 :(得分:2)
问题是Prank[1, ]
是一个data.frame(即列表),所以当你尝试将它分配给csm
的第一行时,它会产生意想不到的转换副作用{ {1}}到列表。此时,执行csm
没有任何意义(列表具有单个维度)因此错误。
解决方案是在分配之前取消列出csm[1, ]
:
Prank[1, ]
答案 1 :(得分:1)
read.csv()返回一个data.frame,除非Prank
的所有列都是数字,否则分配
csm[1,]<-Prank[1,]
会导致csm
被强制转换为列表,因为Prank[1,]
不是数字向量。您需要确保Prank[1,]
是数字向量(即is.numeric(Prank[1,])
)。
修改建议:看看data.frame(head(Prank)
),很明显一列或多列不是数字。要在恶作剧中检查每个字段的类,可以使用
lapply(Prank,class)
或
sapply(Prank,class)
如果Prank
中的所有字段都是整数或数字,则可以通过
Prank[] <- lapply(Prank,as.numeric)
如果并非所有字段都是数字,则您需要将问题字段强制转换为数字或
或者在分配之前从Prank
(例如Prank$ProblemField <- NULL
)删除违规字段。