2012-11-23 31 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

相關問題