Trước tiên, hãy nhập dữ liệu của bạn dưới dạng vectơ của chuỗi ký tự. Sử dụng ví dụ đồ chơi của bạn trong câu hỏi chúng ta có thể làm điều này bằng
txt = "1, 2, 3, 0.3, 2/5, 0.75, 1/3"
dat = read.table(text = txt, sep = ",", stringsAsFactors = F)
Một khi bạn có dữ liệu của bạn trong một vector nhân vật, chúng ta có thể sử dụng eval(parse())
để đánh giá những biểu hiện như thể họ đã gõ vào tại giao diện điều khiển. Thật không may eval
không vectorised, vì vậy chúng tôi quấn nó trong sapply, để áp dụng chức năng này để mỗi phần tử dữ liệu của bạn lần lượt
answer = sapply(dat, function(x) eval(parse(text = x)))
Chúng ta có thể mở rộng này để đối phó với các dữ liệu multirow bằng cách áp dụng các phương pháp trên để mỗi cột tại một thời gian. Ví dụ: như thế này
txt = "col1name, col2name, col3name, col4name
1, 2, 3, 4
0.5, 0.6, 0.7, 0.8
1/2, 2/3, 3/4, 4/5
1, 0.2, 3/3, 4"
dat = read.table(text = txt, sep = ",", stringsAsFactors = F, header = T)
answer = apply(dat, 2, function(this.col) sapply(this.col, function(x) eval(parse(text = x))))
# col1name col2name col3name col4name
# [1,] 1.0 2.0000000 3.00 4.0
# [2,] 0.5 0.6000000 0.70 0.8
# [3,] 0.5 0.6666667 0.75 0.8
# [4,] 1.0 0.2000000 1.00 4.0
Bạn có thể đăng mẫu tệp văn bản của mình ở đâu đó mà chúng tôi có thể tải xuống không? Sau đó, chúng tôi có thể thấy chính xác cấu trúc của dữ liệu bạn đang cố gắng nhập và cung cấp mã tùy chỉnh. – eipi10
@eipi Tôi đã chỉnh sửa ví dụ để hiển thị cấu trúc của tệp tốt hơn. –