2013-06-03 29 views
6

Tôi có một tập lệnh yêu cầu cả thư viện reshapereshape2. Tôi biết đây là thực hành kém, nhưng tôi nghĩ rằng plyr (hoặc một thư viện khác mà tôi đang sử dụng) Vennerable đang tải reshape và tôi đã tự mình sử dụng reshape2 ở nhiều nơi.Mặt nạ gói định hình lại ngăn ngừa sự tan chảy từ các cột đặt tên

Vấn đề là các mặt nạ của reshape2 bởi reshape đang gây ra vấn đề cho các melt chức năng

# Example data frame 
df <- data.frame(id=c(1:5), a=c(rnorm(5)), b=c(rnorm(5))) 

# With just reshape2, variable and value columns are labelled correctly 
library(reshape2) 
melt(df, measure.vars=c("a", "b"), variable.name="type", value.name="distance") 
    id type distance 
1 1 a -2.0233666 
2 2 a 0.4625188 
3 3 a -2.8688127 
4 4 a 0.8151644 
5 5 a -0.4574464 
6 1 b 1.3197784 
7 2 b 1.6213146 
8 3 b 1.3508913 
9 4 b -1.6483839 
10 5 b -1.1342157 

# But my script also has reshape loaded 
library(reshape) 
Loading required package: plyr 

Attaching package: ‘reshape’ 

The following object(s) are masked from ‘package:plyr’: 

    rename, round_any 

The following object(s) are masked from ‘package:reshape2’: 

    colsplit, melt, recast 

# When calling melt in this environment, variable and value columns stick to 
# their default names 
melt(df, measure.vars=c("a", "b"), variable.name="type", value.name="distance") 
    id variable  value 
1 1  a -2.0233666 
2 2  a 0.4625188 
3 3  a -2.8688127 
4 4  a 0.8151644 
5 5  a -0.4574464 
6 1  b 1.3197784 
7 2  b 1.6213146 
8 3  b 1.3508913 
9 4  b -1.6483839 
10 5  b -1.1342157 

Tôi nghĩ tôi đặc biệt có thể gọi melt từ reshape2 sử dụng reshape2::melt nhưng tôi vẫn nhận được cùng một vấn đề.

Có cách nào dễ dàng để giải quyết vấn đề này không? Nếu không, tôi sẽ phải tự gắn nhãn tên cột ngay sau mỗi lần gọi.

+1

Tôi không nghĩ rằng phiên bản mới nhất của 'plyr' sử dụng được 'reshape' nữa. Đó có phải là lý do duy nhất bạn nhập 'reshape'? – Peyton

+0

Tôi không nhập khẩu nó cá nhân, nhưng tôi nghĩ rằng một thư viện là và tôi không thể làm việc ra. Tôi nghi ngờ nó là plyr vì thứ tự của ouput. – MattLBeck

+1

Kiểm tra từng gói như sau: 'installed.packages() [installed.packages() [, 1] ==" ggplot2 ",]' – Roland

Trả lời

7

Sử dụng reshape2:::melt.data.frame(...).

melt thực sự là một phương pháp:

> reshape2::melt 
function (data, ..., na.rm = FALSE, value.name = "value") 
{ 
    UseMethod("melt", data) 
} 
<environment: namespace:reshape2> 

Vì vậy, trong trường hợp của một khung dữ liệu, R sẽ tìm kiếm melt.data.frame, mà là ở reshape:

> melt.data.frame 
function (data, id.vars, measure.vars, variable_name = "variable", 
    na.rm = !preserve.na, preserve.na = TRUE, ...) 
{ 
    ... 
} 
<environment: namespace:reshape> 

Như tôi đã chỉ ra mặc dù, giải pháp tốt nhất có thể là nâng cấp mọi thứ. Đúng là plyr được sử dụng để tải reshape, nhưng không còn nữa. (Edit: Tôi đã suy nghĩ ggplot2.)

+0

Ah, rực rỡ. Tôi cũng đã cố gắng 'reshape2 :: melt.data.frame (...)' nhưng không nhận thức được tôi cần ba dấu hai chấm (nó đã phàn nàn rằng 'melt.data.frame' không được xuất nếu không). Ngoài ra, cổ vũ cho mẹo nâng cấp. – MattLBeck

+1

Có, toán tử dấu ba chấm sẽ lấy các giá trị bên trong (tức là, không xuất). – Peyton

+0

hãy đảm bảo chỉ định biểu mẫu thích hợp cho tập dữ liệu của bạn, trong trường hợp này là melt.data.frame, nhưng các dạng khác bao gồm: melt.array, melt.list, melt.matrix, melt.table và melt.default (đối với vectơ) – woodvi

0

xem xét dỡ gói Reshape và tải lại nó một lần nữa khi cần thiết

detach("package:reshape", unload=TRUE) 
Các vấn đề liên quan