【r<-基礎|函數】dput函數 - 保存R的數據結構

記住這個函數!記住這個函數!記住這個函數!
重要的事情說三遍,為了讓你能更清醒地記住,我再說一遍,記住這個函數!

dput是導出數據結構供重復使用的函數,這是跟別人交流或者請教問題的一個重要函數。比如你在用R分析的時候遇到問題了,有問題的是對某個列表或者數據框進行操作,該怎么讓別人可以重復你的錯誤然后幫你找錯呢?這就是這個函數存在的意義。

舉個例子,假如你有這樣一個數據框:

> staff
      name salary years_old
1 zhangsan   1200        20
2     lisi   2200        30
3   wangwu   3200        40

然后你想給每個人漲200塊并更新表格,想做個簡單計算:

> staff$salary <- staff$salary + 200
Error in staff$salary + 200 : non-numeric argument to binary operator

我擦,什么鬼,英文我不懂,想請教下別人怎么幫你解決,你這時候就用的上dput函數了。

于是你使用這個函數把數據存取,發布到給專家:

> dput(staff)
structure(list(name = structure(c(3L, 1L, 2L), .Label = c("lisi", 
"wangwu", "zhangsan"), class = "factor"), salary = c("1200", 
"2200", "3200"), years_old = c(20, 30, 40)), .Names = c("name", 
"salary", "years_old"), row.names = c(NA, -3L), class = "data.frame")

為了區別,專家用a表示staff把你的數據結構在他的電腦上重現:

> a <- structure(list(name = structure(c(3L, 1L, 2L), .Label = c("lisi", "wangwu", "zhangsan"), class = "factor"), salary = c("1200", 
+                 "2200", "3200"), years_old = c(20, 30, 40)), .Names = c("name", "salary", "years_old"), row.names = c(NA, -3L), class = "data.frame")

然后就可以幫你檢查了:

> str(a)
'data.frame':   3 obs. of  3 variables:
 $ name     : Factor w/ 3 levels "lisi","wangwu",..: 3 1 2
 $ salary   : chr  "1200" "2200" "3200"
 $ years_old: num  20 30 40

喔~原來salary變量是字符向量,不能做數學運算。幫你修改:

> a$salary <- as.integer(a$salary)
> a$salary <- a$salary + 200 
> a
      name salary years_old
1 zhangsan   1400        20
2     lisi   2400        30
3   wangwu   3400        40

導出:

> dput(a)
structure(list(name = structure(c(3L, 1L, 2L), .Label = c("lisi", 
"wangwu", "zhangsan"), class = "factor"), salary = c(1400, 2400, 
3400), years_old = c(20, 30, 40)), .Names = c("name", "salary", 
"years_old"), row.names = c(NA, -3L), class = "data.frame")

然后你把結果拷貝并導回,工作完成:

> salary <- structure(list(name = structure(c(3L, 1L, 2L), .Label = c("lisi", 
+                                                                     "wangwu", "zhangsan"), class = "factor"), salary = c(1400, 2400, 
+                                                                                                                          3400), years_old = c(20, 30, 40)), .Names = c("name", "salary", 
+                                                                                                                                                                        "years_old"), row.names = c(NA, -3L), class = "data.frame")
> salary
      name salary years_old
1 zhangsan   1400        20
2     lisi   2400        30
3   wangwu   3400        40
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 173,142評論 25 708
  • 1. Java基礎部分 基礎部分的順序:基本語法,類相關的語法,內部類的語法,繼承相關的語法,異常的語法,線程的語...
    子非魚_t_閱讀 31,760評論 18 399
  • [轉] 2016-05-18 木易編輯 私木合伙人 [part1][] [part2][][part1]: htt...
    李書文閱讀 1,556評論 0 0
  • 可憐的菜花蛇, 奄奄一息, 被追到生命的絕處。 蛇咬人一口, 人打蛇七寸。 蛇不殺人, 人卻要吃蛇。 于是它搖身變...
    哥窯閱讀 478評論 0 4
  • 不知道 是哪一個清謐的 夜晚 你我相約 從此,生命之旅注定要帶上你的諾言走向那一片晚霰和夕陽..... 目光...
    清吉工雄峰閱讀 351評論 0 0