2012-11-23 26 views

回答

0

一种解决方案是为y转换为data.frame

apply(x,1,function(y){as.data.frame(y)[2,]}) 

[1] 6 7 8

+1

@TimN我因为在这种情况下,类y分别为使用as.data.frame一个data.frame.with POSIXct,y是什么类? – agstudy

5

出现这种情况是,apply函数胁迫您data.frame成矩阵的原因然后执行操作。如果你看一下apply的代码,你会发现:

if (is.object(X)) 
    X <- if (dl == 2L) 
     as.matrix(X) 
    else as.array(X) 

矩阵只能存储一个数据类型,当有多个,它强制转换到一个最高水平。在你的情况下,角色。那么你能做什么呢?从plyr使用aaply。 有轻微的修改运行代码(使用[[代替[所以它返回一个矢量,而不是一个数据帧):

x<-data.frame(a=1:3,b=6:8,d=c("a","bc","def")) 
library(plyr) 
aaply(x, 1, function(y){y[["b"]]}, .expand=FALSE) 

1 2 3 
6 7 8 
+1

请注意,您并不需要匿名函数''aaply(x,1,'[[','b',.expand = FALSE)''可以很好地工作。 – mnel

相关问题