Tôi sẽ đánh giá cao sự hiểu biết về lý do tại sao điều này xảy ra và cách tôi có thể làm điều này một cách hùng hồn hơn.Tại sao sapply trả về ma trận mà tôi cần phải chuyển đổi, và sau đó ma trận transposed sẽ không đính kèm vào một khung dữ liệu?
Khi tôi sử dụng sapply, tôi muốn nó trả về ma trận 3x2, nhưng nó trả về ma trận 2x3. Tại sao điều này? Và tại sao khó gắn nó vào một khung dữ liệu khác?
a <- data.frame(id=c('a','b','c'), var1 = c(1,2,3), var2 = c(3,2,1))
out <- sapply(a$id, function(x) out = a[x, c('var1', 'var2')])
#out is 3x2, but I would like it to be 2x3
#I then want to append t(out) (out as a 2x3 matrix) to b, a 1x3 dataframe
b <- data.frame(var3=c(0,0,0))
khi tôi cố gắng để đính kèm này,
b[,c('col2','col3')] <- t(out)
Các lỗi mà tôi nhận được là:
Warning message:
In `[<-.data.frame`(`*tmp*`, , c("col2", "col3"), value = list(1, :
provided 6 variables to replace 2 variables
mặc dù sau xuất hiện để cung cấp cho các kết quả mong muốn:
rownames(out) <- c('col1', 'col2')
b <- cbind(b, t(out))
Tôi không thể hoạt động vào ngày thứ biến e:
b$var1/b$var2
lợi nhuận
Error in b$var1/b$var2 : non-numeric argument to binary operator
Cảm ơn!
Bạn đang cố gắng để làm với dữ liệu này? Ví dụ của bạn không thực sự làm bất cứ điều gì có ý nghĩa. – hadley
@hadley: Ví dụ tuân theo nguyên tắc đăng bài R cung cấp ví dụ tối thiểu, khả thi. Trường hợp thực tế khá phức tạp và sự phức tạp sẽ làm giảm đi câu hỏi trung tâm. Hàm tôi đã ước tính độ nhạy của một mô hình với 20 tham số khác nhau bằng cách sử dụng mở rộng chuỗi taylor và chấp nhận khung dữ liệu 20x8 làm đầu vào. Tôi rất sẵn lòng gửi một ví dụ tái sản xuất đầy đủ nếu bạn muốn, mặc dù nó chưa sẵn sàng để được công khai. –
Bạn cần phải phấn đấu để có một phương tiện vui vẻ giữa điều gì đó dễ hiểu và cái gì đó nắm bắt được bản chất của vấn đề mà bạn đang gặp khó khăn.Trong ví dụ hiện tại của bạn có vẻ như bạn đang cố gắng để có được 'b' bằng với' a'. – hadley