2012-08-10 220 views
-7

这里是我的代码,是否有更简单的方法将iris更改为数组?
要求:当你改变了它,d [2,3] =光圈[2,3] = 1.4将data.frame更改为数组

data(iris) 
r=nrow(iris) 
c=ncol(iris) 
d=array(0,dim=c(r,c)) 
for (i in 1:r){ 
    for (j in 1:c){ 
     d[i,j]=iris[i,j]}} 
+6

这是你的第三个问题上非常相似的主题,如果你给的你正在尝试做的(例如,为什么你想你的数据更好的解释在一个数组中,而不是data.frame),那么可能会更容易提供帮助。 – mnel 2012-08-10 00:36:47

+5

数组中的所有条目必须是相同的类型。但最后一列“虹膜”是一个因素。这里有一些可能有用的想法:as.matrix(虹膜),as.matrix(虹膜[,-5]),'data.matrix(虹膜)'。 – bdemarest 2012-08-10 00:37:29

+0

我想更好地了解R。 – 2012-08-10 10:26:03

回答

6

这是做一个非常不寻常的事情。

不,它比不寻常的更糟糕。这可能只是坏事。如果所有数据都是一个类,那么矩阵和数组非常有用,适用且速度非常快。如果您有混合类,则使用数据框。

但是,你在这里。在第一个示例中,所有数据都转换为character,第二个转换为numeric

x <- as.array(as.matrix(iris)) 

head(x) 
    Sepal.Length Sepal.Width Petal.Length Petal.Width Species 
[1,] "5.1"  "3.5"  "1.4"  "0.2"  "setosa" 
[2,] "4.9"  "3.0"  "1.4"  "0.2"  "setosa" 
[3,] "4.7"  "3.2"  "1.3"  "0.2"  "setosa" 
[4,] "4.6"  "3.1"  "1.5"  "0.2"  "setosa" 
[5,] "5.0"  "3.6"  "1.4"  "0.2"  "setosa" 
[6,] "5.4"  "3.9"  "1.7"  "0.4"  "setosa" 

或者......

x <- array(unlist(iris), dim=c(150, 5), dimnames=list(NULL, names(iris))) 

head(x) 
    Sepal.Length Sepal.Width Petal.Length Petal.Width Species 
[1,]   5.1   3.5   1.4   0.2  1 
[2,]   4.9   3.0   1.4   0.2  1 
[3,]   4.7   3.2   1.3   0.2  1 
[4,]   4.6   3.1   1.5   0.2  1 
[5,]   5.0   3.6   1.4   0.2  1 
[6,]   5.4   3.9   1.7   0.4  1 
+0

+1解释为什么这是一个坏主意*和*给出答案 – 2012-08-10 17:35:58