විශිෂ්ට R ප්‍රජනනය කළ හැකි උදාහරණයක් කරන්නේ කෙසේද


2473

සගයන් සමඟ කාර්ය සාධනය සාකච්ඡා කරන විට, ඉගැන්වීම, දෝෂ වාර්තාවක් යැවීම හෝ තැපැල් ලැයිස්තු පිළිබඳ මග පෙන්වීමක් සහ මෙහි ස්ටැක් පිටාර ගැලීම පිළිබඳ සොයා බැලීමේදී, ප්‍රජනනය කළ හැකි උදාහරණයක් බොහෝ විට අසනු ලබන අතර සෑම විටම ප්‍රයෝජනවත් වේ.

විශිෂ්ට උදාහරණයක් නිර්මාණය කිරීම සඳහා ඔබේ උපදෙස් මොනවාද? ඔබ දත්ත ව්‍යුහයන් අලවන්නේ කෙසේද?පෙළ ආකෘතියකින්ද? ඔබ ඇතුළත් කළ යුතු වෙනත් තොරතුරු මොනවාද?

එහි අනෙකුත් උපක්රම භාවිතා කිරීමට අමතරව ය dput(), dump()හෝ structure()? ඔබ ඇතුළත් කළ යුත්තේ library()හෝ require()ප්‍රකාශ කළ යුත්තේ කවදාද ? වචන එකක් වැළකී සිටිය යුතුද, ඊට අමතරව වෙන් කළ c, df, data, ආදිය?

යමෙක් ශ්‍රේෂ් make වන්නේ කෙසේද? ප්‍රජනන උදාහරණය?


34
ප්‍රශ්නයේ විෂය පථය ගැන මම ව්‍යාකූල වී සිටිමි. SO හෝ R-help ("දෝෂය ප්‍රතිනිෂ්පාදනය කරන්නේ කෙසේද") පිළිබඳ ප්‍රශ්න ඇසීමේදී මිනිසුන් ප්‍රජනනය කළ හැකි උදාහරණයේ අර්ථ නිරූපණයට පැන ඇති බව පෙනේ. උදව් පිටුවල ප්‍රජනනය කළ හැකි R උදාහරණ ගැන කුමක් කිව හැකිද? ඇසුරුම් නිරූපණ වලද? නිබන්ධන / ඉදිරිපත් කිරීම් වලදී?
බව්තීස්ත

15
ap බැප්ටිස්ට්: දෝෂය අවම වේ. මා විසින් පැහැදිලි කරන ලද සියලුම ශිල්පීය ක්‍රම පැකේජ උපකාරක පිටුවල භාවිතා වන අතර නිබන්ධන සහ ඉදිරිපත් කිරීම් වලදී මම R
Joris Meys

33
ව්‍යුහය අනුකරණය කිරීමට තරම් සංකීර්ණ විය හැකි බැවින් දත්ත සමහර විට සීමාකාරී සාධකය වේ. පුද්ගලික දත්ත වලින් පොදු දත්ත නිෂ්පාදනය කිරීම සඳහා: stackoverflow.com/questions/10454973/… හි stackoverflow.com/a/10458688/742447
Etienne Low-Décarie

Answers:


1729

අවම ප්රතිනිෂ්පාදනය උදාහරණයක් පහත සඳහන් ද්රව්ය සමන්විත:

  • ගැටළුව නිරූපණය කිරීමට අවශ්‍ය අවම දත්ත කට්ටලයක්
  • ලබා දී ඇති දත්ත කට්ටලය මත ධාවනය කළ හැකි දෝෂය ප්‍රතිනිෂ්පාදනය කිරීමට අවශ්‍ය අවම ධාවනය කළ හැකි කේතය
  • භාවිතා කරන ලද පැකේජ, R අනුවාදය සහ එය ක්‍රියාත්මක වන පද්ධතිය පිළිබඳ අවශ්‍ය තොරතුරු.
  • අහඹු ක්රියාවලි නඩුව, (විසින් පිහිටුවන ලද බීජ set.seed()පවතිනවා සඳහා) 1

හොඳ අවම ප්‍රජනනය කළ හැකි උදාහරණ සඳහා , ඔබ භාවිතා කරන ශ්‍රිතයේ උදව් ගොනු බලන්න. පොදුවේ ගත් කල, එහි දී ඇති සියලුම කේතයන් අවම ප්‍රජනනය කළ හැකි උදාහරණයක අවශ්‍යතා සපුරාලයි: දත්ත ලබා දී ඇත, අවම කේතයක් ලබා දී ඇත, සහ සියල්ල ක්‍රියාත්මක කළ හැකිය. බොහෝ උඩු යටිකුරු සහිතව ස්ටැක් පිටාර ගැලීම පිළිබඳ ප්‍රශ්න දෙස බලන්න.

අවම දත්ත කට්ටලයක් නිෂ්පාදනය කිරීම

බොහෝ අවස්ථාවන්හීදී, සමහර අගයන් සහිත දෛශික / දත්ත රාමුවක් ලබා දීමෙන් මෙය පහසුවෙන් කළ හැකිය. නැතහොත් ඔබට බොහෝ පැකේජ ලබා දී ඇති සාදන ලද දත්ත කට්ටල වලින් එකක් භාවිතා කළ හැකිය.
බිල්ට් දත්ත කට්ටලවල සවිස්තර ලැයිස්තුවක් සමඟ දැකිය හැකිය library(help = "datasets"). සෑම දත්ත කට්ටලයක් සඳහාම කෙටි විස්තරයක් ?mtcarsඇති අතර ලැයිස්තුවේ ඇති දත්ත කට්ටලවලින් එකක් වන 'mtcars' කොතැනද යන්න සමඟ වැඩි විස්තර ලබා ගත හැකිය . වෙනත් පැකේජවල අතිරේක දත්ත කට්ටල අඩංගු විය හැකිය.

දෛශිකයක් සෑදීම පහසුය. සමහර විට එයට යම් අහඹු බවක් එක් කිරීම අවශ්‍ය වන අතර, එය සිදු කිරීම සඳහා සම්පූර්ණ කාර්යයන් ගණනක් ඇත. sample()දෛශිකයක් සසම්භාවීකරණය කළ හැකිය, නැතහොත් අගයන් කිහිපයක් සහිත අහඹු දෛශිකයක් ලබා දිය හැකිය. lettersහෝඩිය අඩංගු ප්‍රයෝජනවත් දෛශිකයකි. සාධක සෑදීම සඳහා මෙය භාවිතා කළ හැකිය.

උදාහරණ කිහිපයක්:

  • සසම්භාවී අගයන්: x <- rnorm(10)සාමාන්‍ය බෙදා හැරීම x <- runif(10)සඳහා, ඒකාකාර බෙදා හැරීම සඳහා, ...
  • සමහර අගයන් ක්‍රමාංකනය කිරීම: x <- sample(1:10)දෛශික 1:10 සඳහා අහඹු ලෙස.
  • අහඹු සාධකය: x <- sample(letters[1:4], 20, replace = TRUE)

මෙට්‍රික්ස් සඳහා, කෙනෙකුට භාවිතා කළ හැකිය matrix(), උදා:

matrix(1:10, ncol = 2)

දත්ත රාමු සෑදීම භාවිතයෙන් කළ හැකිය data.frame(). දත්ත රාමුවේ ඇතුළත් කිරීම් නම් කිරීම සහ එය ඕනෑවට වඩා සංකීර්ණ නොකිරීමට යමෙකු අවධානය යොමු කළ යුතුය.

උදාහරණයක් :

set.seed(1)
Data <- data.frame(
    X = sample(1:10),
    Y = sample(c("yes", "no"), 10, replace = TRUE)
)

සමහර ප්‍රශ්න සඳහා, විශේෂිත ආකෘතීන් අවශ්‍ය විය හැකිය. මේ සඳහා, එක් ලබා ඕනෑම භාවිතා කළ හැකිය as.someType: කාර්යයන් as.factor, as.Date, as.xtsදෛශික සහ / හෝ දත්ත රාමුව උපක්රම සංයෝජනය, ... මේවා.

ඔබගේ දත්ත පිටපත් කරන්න

ඔබ මෙම ඉඟි භාවිතා ඉදි කිරීමට අපහසු බව දත්ත වගයක් තියෙනවා නම්, සෑම විටම ඔබට, ඔබේ මුල් දත්ත, භාවිතා උප කුලකයක් කළ හැකි head(), subset()හෝ දර්ශක. dput()වහාම R තුළට දැමිය හැකි යමක් අපට ලබා දීමට භාවිතා කරන්න:

> dput(iris[1:4, ]) # first four rows of the iris data set
structure(list(Sepal.Length = c(5.1, 4.9, 4.7, 4.6), Sepal.Width = c(3.5, 
3, 3.2, 3.1), Petal.Length = c(1.4, 1.4, 1.3, 1.5), Petal.Width = c(0.2, 
0.2, 0.2, 0.2), Species = structure(c(1L, 1L, 1L, 1L), .Label = c("setosa", 
"versicolor", "virginica"), class = "factor")), .Names = c("Sepal.Length", 
"Sepal.Width", "Petal.Length", "Petal.Width", "Species"), row.names = c(NA, 
4L), class = "data.frame")

ඔබේ දත්ත රාමුවට බොහෝ මට්ටම් සහිත සාධකයක් තිබේ නම්, dputප්‍රතිදානය නොසැලකිලිමත් විය හැකි බැවින් එය ඔබගේ දත්තවල උප කුලකයේ නොතිබුණද හැකි සාධක සාධක ලැයිස්තුගත කරයි. මෙම ගැටළුව විසඳීම සඳහා, ඔබට droplevels()ශ්‍රිතය භාවිතා කළ හැකිය . විශේෂයන් එක් මට්ටමක් පමණක් ඇති සාධකයක් වන්නේ කෙසේදැයි පහත බලන්න:

> dput(droplevels(iris[1:4, ]))
structure(list(Sepal.Length = c(5.1, 4.9, 4.7, 4.6), Sepal.Width = c(3.5, 
3, 3.2, 3.1), Petal.Length = c(1.4, 1.4, 1.3, 1.5), Petal.Width = c(0.2, 
0.2, 0.2, 0.2), Species = structure(c(1L, 1L, 1L, 1L), .Label = "setosa",
class = "factor")), .Names = c("Sepal.Length", "Sepal.Width", 
"Petal.Length", "Petal.Width", "Species"), row.names = c(NA, 
4L), class = "data.frame")

භාවිතා කරන විට dput, ඔබට අදාළ තීරු පමණක් ඇතුළත් කිරීමට අවශ්‍ය විය හැකිය:

> dput(mtcars[1:3, c(2, 5, 6)]) # first three rows of columns 2, 5, and 6
structure(list(cyl = c(6, 6, 4), drat = c(3.9, 3.9, 3.85), wt = c(2.62, 
2.875, 2.32)), row.names = c("Mazda RX4", "Mazda RX4 Wag", "Datsun 710"
), class = "data.frame")

තවත් එක් අවවාදයක් dputනම්, එය යතුරු data.tableවස්තු සඳහා හෝ කණ්ඩායම් tbl_df(පන්තිය grouped_df) සඳහා ක්‍රියා නොකරනු ඇත dplyr. මෙම අවස්ථා වලදී බෙදා ගැනීමට පෙර ඔබට සාමාන්‍ය දත්ත රාමුවකට පරිවර්තනය කළ හැකිය dput(as.data.frame(my_data)).

නරකම අවස්ථාව, ඔබට පහත දැක්වෙන textපරාමිතිය භාවිතා කර කියවිය හැකි පෙළ නිරූපණයක් ලබා දිය හැකිය read.table:

zz <- "Sepal.Length Sepal.Width Petal.Length Petal.Width Species
1          5.1         3.5          1.4         0.2  setosa
2          4.9         3.0          1.4         0.2  setosa
3          4.7         3.2          1.3         0.2  setosa
4          4.6         3.1          1.5         0.2  setosa
5          5.0         3.6          1.4         0.2  setosa
6          5.4         3.9          1.7         0.4  setosa"

Data <- read.table(text=zz, header = TRUE)

අවම කේතයක් නිෂ්පාදනය කිරීම

මෙය පහසුම කොටස විය යුතු නමුත් බොහෝ විට එසේ නොවේ. ඔබ නොකළ යුතු දේ නම්:

  • සියලු ආකාරයේ දත්ත පරිවර්තනයන් එක් කරන්න. සපයා ඇති දත්ත දැනටමත් නිවැරදි ආකෘතියේ ඇති බවට වග බලා ගන්න (එය ඇත්ත වශයෙන්ම ගැටලුව නොවේ නම්)
  • දෝෂයක් ලබා දෙන කේතයේ සම්පූර්ණ ශ්‍රිතයක් / කැබැල්ලක් පිටපත් කරන්න. පළමුව, දෝෂයට හරියටම හේතු වන්නේ කුමන රේඛාදැයි සොයා ගැනීමට උත්සාහ කරන්න. බොහෝ විට ඔබ ඔබම ගැටලුව කුමක්දැයි සොයා ගනු ඇත.

ඔබ කළ යුත්තේ,

  • ඔබ කිසියම් (භාවිතා කරමින් library()) භාවිතා කරන්නේ නම් කුමන පැකේජ භාවිතා කළ යුතුද යන්න එක් කරන්න
  • ඔබ සම්බන්ධතා විවෘත කරන්නේ නම් හෝ ගොනු සාදන්නේ නම්, ඒවා වසා දැමීමට යම් කේතයක් එක් කරන්න හෝ ගොනු මකා දමන්න (භාවිතා කරමින් unlink())
  • ඔබ විකල්පයන් වෙනස් කරන්නේ නම්, කේතයේ මුල් ඒවා වෙත ආපසු හැරවීමට ප්‍රකාශයක් අඩංගු බවට වග බලා ගන්න. (උදා op <- par(mfrow=c(1,2)) ...some code... par(op))
  • කේතය ක්‍රියාත්මක කළ හැකි දැයි තහවුරු කර ගැනීම සඳහා ඔබේ කේතය නව හිස් R සැසියක ධාවනය කරන්න. ඔබේ දත්ත සහ කේතය කොන්සෝලය තුළ පිටපත් කර ඔබට ඇති ආකාරයටම ලබා ගැනීමට මිනිසුන්ට හැකි විය යුතුය.

අමතර තොරතුරු දෙන්න

බොහෝ අවස්ථාවන්හීදී, R අනුවාදය සහ මෙහෙයුම් පද්ධතිය පමණක් ප්‍රමාණවත් වේ. පැකේජ සමඟ ගැටුම් ඇති වූ විට, ප්‍රතිදානය ලබා දීම sessionInfo()සැබවින්ම උපකාරී වේ. වෙනත් යෙදුම් සමඟ සම්බන්ධතා ගැන කතා කරන විට (එය ODBC හෝ වෙනත් දෙයක් හරහා වේවා), යමෙකු ඒවා සඳහා අනුවාද අංක ලබා දිය යුතු අතර, හැකි නම් සැකසුම පිළිබඳ අවශ්‍ය තොරතුරු ද ලබා දිය යුතුය.

ඔබ ආර් ධාවනය කරන්නේ නම් ආර් ශබ්දාගාර භාවිතා rstudioapi::versionInfo()ඔබගේ RStudio අනුවාදය වාර්තා කිරීමට උපකාරී විය හැක.

ඔබට නිශ්චිත පැකේජයක් සමඟ ගැටළුවක් ඇත්නම්, ප්‍රතිදානය ලබා දීමෙන් පැකේජයේ අනුවාදය ලබා දීමට ඔබට අවශ්‍ය විය හැකිය packageVersion("name of the package").


1 සටහන: ප්‍රතිදානය set.seed()R> 3.6.0 සහ පෙර අනුවාද අතර වෙනස් වේ. අහඹු ක්‍රියාවලිය සඳහා ඔබ භාවිතා කළ R අනුවාදය සඳහන් කරන්න, පැරණි ප්‍රශ්න අනුගමනය කිරීමේදී ඔබට තරමක් වෙනස් ප්‍රති results ල ලැබෙන්නේ නම් පුදුම නොවන්න. එවැනි අවස්ථාවන්හිදී එකම RNGversion()ප්‍රති result ලය ලබා ගැනීම සඳහා, ඔබට පෙර-ක්‍රියාකාරීත්වය භාවිතා කළ හැකිය set.seed()(උදා :) RNGversion("3.5.2").


6
dputදත්ත රාමුව ඉතා විශාල නම් සහ දත්ත රාමුවේ මැදින් ගැටළුව ජනනය වන්නේ නම් ඔබ භාවිතා කරන්නේ කෙසේද? භාවිතා කිරීමට ඇති ක්රමයක් dputපේළි 60 70 මගින් කියන්නේ, දත්ත මැද භාගයේ කොටස ප්රජනනය කිරීම?
BgnR

27
GBgnR ඔබට දර්ශක භාවිතයෙන් දත්ත රාමුවේ කොටසක් උකහා ගත හැකිය, උදා: tmp <- mydf[50:70,]ඉන්පසු dput(mydf). දත්ත රාමුව සැබවින්ම විශාල නම්, ගැටළුව හුදකලා කිරීමට උත්සාහ කර ගැටළුවට හේතු වන පේළි කිහිපයක් ඉදිරිපත් කරන්න.
ජෝරිස් මේස්

4
Or ජොරිස්මීස්: පුනරාවර්තන ලෙස N මට්ටම දක්වා දත්ත පැවසීමට headහෝ dputසීමා කිරීමට ක්‍රමයක් තිබේද? මම ප්‍රජනනය කළ හැකි උදාහරණයක් ඉදිරිපත් කිරීමට උත්සාහ කරන අතර මගේ දත්ත දත්ත රාමු ලැයිස්තුවකි. එබැවින් dput(head(myDataObj))14MB ප්‍රමාණයේ ප්‍රතිදාන ගොනුවක් ජනනය කරන බැවින් එය ප්‍රමාණවත් නොවන බව පෙනේ.
ඇලෙක්සැන්ඩර් බ්ලෙක්

5
Or ජොරිස්මීස්: යන්තම් FYI - ඉහත අදහස් දැක්වීමේ ප්‍රශ්නය වෙනම ප්‍රශ්නයක් ලෙස පළ කර ඇත: stackoverflow.com/questions/25127026/… .
ඇලෙක්සැන්ඩර් බ්ලෙක්

4
On කොන්රාඩ් ඔබට කළ හැකි හොඳම දේ ගොනුවට සම්බන්ධ කර එම ගොනුවේ කියවීමට අවම විධානය ලබා දීමයි. Dput () හි ප්‍රතිදානය පිටපත් කිරීමට වඩා එය අඩු කරදරයක් වනු ඇත :)
ජෝරිස් මේස්

590

( ප්‍රජනනය කළ හැකි උදාහරණයක් ලියන්නේ කෙසේද යන්න පිළිබඳ මගේ උපදෙස් මෙන්න . මම එය කෙටි නමුත් මිහිරි කිරීමට උත්සාහ කළෙමි)

ප්‍රජනනය කළ හැකි උදාහරණයක් ලියන්නේ කෙසේද.

ඔබ ප්‍රජනනය කළ හැකි ආදර්ශයක් සපයන්නේ නම් ඔබේ R ගැටලුවට හොඳ උපකාර ලබා ගැනීමට බොහෝ දුරට ඉඩ ඇත. ප්‍රජනනය කළ හැකි උදාහරණයක් වෙනත් කෙනෙකුට R කේතය පිටපත් කර ඇලවීමෙන් ඔබේ ගැටලුව නැවත ප්‍රතිනිර්මාණය කිරීමට ඉඩ දෙයි.

ඔබේ උදාහරණය ප්‍රජනනය කිරීමට ඔබ ඇතුළත් කළ යුතු කරුණු හතරක් ඇත: අවශ්‍ය පැකේජ, දත්ත, කේතය සහ ඔබේ R පරිසරය පිළිබඳ විස්තරයක්.

  • ස්ක්‍රිප්ටයේ ඉහළින් පැකේජ පූරණය කළ යුතුය, එබැවින් උදාහරණයට අවශ්‍ය ඒවා මොනවාදැයි බැලීම පහසුය.

  • විද්‍යුත් තැපෑලක හෝ දත්ත පිටාර ගැලීමේ ප්‍රශ්නයට දත්ත ඇතුළත් කිරීමට ඇති පහසුම ක්‍රමය නම් dput()එය ප්‍රතිනිර්මාණය කිරීම සඳහා R කේතය ජනනය කිරීමයි. උදාහරණයක් ලෙස, mtcarsR හි දත්ත කට්ටලය ප්‍රතිනිර්මාණය කිරීමට , මම පහත පියවරයන් අනුගමනය කරමි:

    1. dput(mtcars)ආර් වලින් ධාවනය කරන්න
    2. ප්‍රතිදානය පිටපත් කරන්න
    3. මගේ ප්‍රජනන පිටපතෙහි ටයිප් කර mtcars <-අලවන්න.
  • ඔබේ කේතය අනෙක් අයට කියවීමට පහසු බව සහතික කර ගැනීමට සුළු කාලයක් ගත කරන්න :

    • ඔබ අවකාශයන් භාවිතා කර ඇති බවට වග බලා ගන්න සහ ඔබේ විචල්‍ය නම් සංක්ෂිප්ත නමුත් තොරතුරු සහිතය

    • ඔබේ ගැටලුව පවතින්නේ කොතැනදැයි දැක්වීමට අදහස් භාවිතා කරන්න

    • ගැටලුවට සම්බන්ධ නොවන සියල්ල ඉවත් කිරීමට ඔබේ උපරිමය කරන්න.
      ඔබේ කේතය කෙටි වන තරමට එය තේරුම් ගැනීම පහසුය.

  • sessionInfo()ඔබේ කේතයේ විවරණයක ප්‍රතිදානය ඇතුළත් කරන්න . මෙය ඔබගේ R පරිසරය සාරාංශගත කරන අතර ඔබ යල්පැනගිය පැකේජයක් භාවිතා කරන්නේ දැයි පරීක්ෂා කිරීම පහසු කරයි.

නැවුම් R සැසියක් ආරම්භ කර ඔබේ ස්ක්‍රිප්ට් එක ඇලවීමෙන් ඔබ සැබවින්ම ප්‍රජනනය කළ හැකි ආදර්ශයක් ලබා ඇත්දැයි පරීක්ෂා කළ හැකිය.

ඔබගේ සියලු කේත විද්‍යුත් තැපෑලකට දැමීමට පෙර, එය Gist github මත තැබීම ගැන සලකා බලන්න . එය ඔබගේ කේතයට හොඳ සින්ටැක්ස් ඉස්මතු කිරීමක් ලබා දෙනු ඇති අතර, ඊමේල් පද්ධතිය මඟින් කිසිවක් හසුරුවනු ලැබීම ගැන ඔබ කරදර විය යුතු නැත.


25
reprexin tidyverseයනු අවම, ප්‍රජනනය කළ හැකි උදාහරණයක් නිෂ්පාදනය කිරීම සඳහා හොඳ පැකේජයකි: github.com/tidyverse/reprex
mt1022

20
මට සාමාන්‍යයෙන් කේත සහිත ඊමේල් ලැබෙනු ඇත. කේත අඩංගු අමුණා ඇති වචන ලේඛන සහිත ඊමේල් පවා මට ලැබේ. සමහර විට මට කේතයේ තිරය අඩංගු අමුණා ඇති වචන ලේඛන සහිත ඊමේල් පවා ලැබේ.
හැඩ්ලි

304

පුද්ගලිකව, මම කැමති "එක්" ලයිනර් ය. රේඛා ඔස්සේ යමක්:

my.df <- data.frame(col1 = sample(c(1,2), 10, replace = TRUE),
        col2 = as.factor(sample(10)), col3 = letters[1:10],
        col4 = sample(c(TRUE, FALSE), 10, replace = TRUE))
my.list <- list(list1 = my.df, list2 = my.df[3], list3 = letters)

දත්ත ව්‍යුහය අනුකරණය කළ යුත්තේ ලේඛකයාගේ ගැටලුව පිළිබඳ අදහස මිස නිශ්චිත වාචික ව්‍යුහය නොවේ. විචල්යයන් මගේම විචල්යයන් හෝ දෙවියන් තහනම් කිරීම, කාර්යයන් (වැනි df) නැවත ලියන්නේ නැති විට මම එය අගය කරමි .

විකල්පයක් ලෙස, කෙනෙකුට කොන් කිහිපයක් කපා පෙර පැවති දත්ත කට්ටලයක් වෙත යොමු කළ හැකිය, වැනි දෙයක්:

library(vegan)
data(varespec)
ord <- metaMDS(varespec)

ඔබ භාවිතා කරන විශේෂ පැකේජ සඳහන් කිරීමට අමතක නොකරන්න.

ඔබ විශාල වස්තූන් මත යමක් නිරූපණය කිරීමට උත්සාහ කරන්නේ නම්, ඔබට උත්සාහ කළ හැකිය

my.df2 <- data.frame(a = sample(10e6), b = sample(letters, 10e6, replace = TRUE))

ඔබ rasterපැකේජය හරහා අවකාශීය දත්ත සමඟ වැඩ කරන්නේ නම් , ඔබට අහඹු දත්ත කිහිපයක් ජනනය කළ හැකිය. පැකේජයේ විග්නෙට් හි උදාහරණ රාශියක් සොයාගත හැකිය, නමුත් මෙන්න කුඩා නාගයක්.

library(raster)
r1 <- r2 <- r3 <- raster(nrow=10, ncol=10)
values(r1) <- runif(ncell(r1))
values(r2) <- runif(ncell(r2))
values(r3) <- runif(ncell(r3))
s <- stack(r1, r2, r3)

ක්‍රියාත්මක කර ඇති පරිදි spඔබට යම් අවකාශීය වස්තුවක් අවශ්‍ය නම්, ඔබට "අවකාශීය" පැකේජවල බාහිර ලිපිගොනු (ESRI හැඩ ගොනුව වැනි) හරහා දත්ත කට්ටල ලබා ගත හැකිය (කාර්ය දර්ශන වල අවකාශීය දර්ශනය බලන්න).

library(rgdal)
ogrDrivers()
dsn <- system.file("vectors", package = "rgdal")[1]
ogrListLayers(dsn)
ogrInfo(dsn=dsn, layer="cities")
cities <- readOGR(dsn=dsn, layer="cities")

1
IMHO, භාවිතා කරන විට sampleහෝ runifඑය විචක්ෂණශීලී ය set.seed. අවම වශයෙන්, නියැදි කිරීම හෝ අහඹු සංඛ්‍යා උත්පාදනය පිළිබඳ උදාහරණ ඉදිරිපත් කිරීමේදී මට ලැබුණු යෝජනාව මෙයයි.
කොන්රාඩ්

1
On කොන්රාඩ් මම එකඟයි, නමුත් මෙය රඳා පවතී. ඔබ යම් සංඛ්‍යා උත්පාදනය කිරීමට උත්සාහ කරන්නේ නම් බීජයක් අවශ්‍ය නොවනු ඇත, නමුත් ස්ථාවර සංඛ්‍යා අවශ්‍ය වන නිශ්චිත යමක් තේරුම් ගැනීමට ඔබ උත්සාහ කරන්නේ නම්, බීජයක් අනිවාර්ය වේ.
රෝමන් ලුස්ට්‍රික්

1
බීජ ඉමෝ සමඟ එය සැමවිටම වඩා හොඳය, අපේක්ෂිත නිමැවුමට තමන්ගේම විසඳුමක් සංසන්දනය කිරීම, තමන් අතර විසඳුම් සංසන්දනය කිරීම පහසු කරයි, සහ මේ ආකාරයෙන් නොදන්නා (සහ දැන ගැනීමට අවශ්‍ය නොවන) පරිශීලකයින් ක්‍රියා කරන runifහෝ sampleව්‍යාකූල නොවන ඔවුන්ට එකම දත්ත ලබා ගත නොහැකි බව.
මූඩි_මුඩ්ස්කිපර්

2
ikemikey ඔබ usmap පැකේජය දෙස බැලුවද ?
රෝමන් ලුස්ට්‍රික්

2
ikemikey පැකේජය ටයිග්‍රිස් විවිධ
හැඩතලවලින්

277

මෙම
reproduce(<mydata>)පෝස්ට් එකෙන් ආශ්වාදයක් ලද මම දැන් ස්ටැක් ඕවර්ෆ්ලෝ වෙත පළ කිරීමට අවශ්‍ය වූ විට පහසු කාර්යයක් භාවිතා කරමි.


ඉක්මන් උපදෙස්

නම් myDataප්රජනනය ඔබගේ වස්තුව නම වේ, හා R පහත සඳහන් ක්රියාත්මක කරන්න:

install.packages("devtools")
library(devtools)
source_url("https://raw.github.com/rsaporta/pubR/gitbranch/reproduce.R")

reproduce(myData)

විස්තර:

මෙම ශ්‍රිතය බුද්ධිමත් එතුමෙකු වන dputඅතර පහත සඳහන් දේ කරයි:

  • විශාල දත්ත කට්ටලයක් ස්වයංක්‍රීයව සාම්පල ලබා ගනී (ප්‍රමාණය සහ පන්තිය මත පදනම්ව. නියැදි ප්‍රමාණය වෙනස් කළ හැකිය)
  • dputප්‍රතිදානයක් නිර්මාණය කරයි
  • ඔබ නියම කිරීමට ඉඩ ඇති අපනයන තීරු
  • එහි ඉදිරිපස පැත්තට එකතු වන අතර එමඟින් objName <- ...පහසුවෙන් පිටපත් කර + ඇලවිය හැකිය, නමුත් ...
  • මැක් මත වැඩ කරන්නේ නම්, ප්‍රතිදානය ස්වයංක්‍රීයව ක්ලිප් පුවරුවට පිටපත් කරනු ලැබේ, එවිට ඔබට එය සරලව ක්‍රියාත්මක කර ඔබේ ප්‍රශ්නයට අලවන්න.

ප්‍රභවය මෙතැනින් ලබා ගත හැකිය:


උදාහරණයක්:

# sample data
DF <- data.frame(id=rep(LETTERS, each=4)[1:100], replicate(100, sample(1001, 100)), Class=sample(c("Yes", "No"), 100, TRUE))

ඩීඑෆ් 100 x 102 ක් පමණ වේ. මට පේළි 10 ක් සහ නිශ්චිත තීරු කිහිපයක් නියැදි කිරීමට අවශ්‍යයි

reproduce(DF, cols=c("id", "X1", "X73", "Class"))  # I could also specify the column number. 

පහත ප්‍රතිදානය ලබා දෙයි:

This is what the sample looks like: 

    id  X1 X73 Class
1    A 266 960   Yes
2    A 373 315    No            Notice the selection split 
3    A 573 208    No           (which can be turned off)
4    A 907 850   Yes
5    B 202  46   Yes         
6    B 895 969   Yes   <~~~ 70 % of selection is from the top rows
7    B 940 928    No
98   Y 371 171   Yes          
99   Y 733 364   Yes   <~~~ 30 % of selection is from the bottom rows.  
100  Y 546 641    No        


    ==X==============================================================X==
         Copy+Paste this part. (If on a Mac, it is already copied!)
    ==X==============================================================X==

 DF <- structure(list(id = structure(c(1L, 1L, 1L, 1L, 2L, 2L, 2L, 25L, 25L, 25L), .Label = c("A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y"), class = "factor"), X1 = c(266L, 373L, 573L, 907L, 202L, 895L, 940L, 371L, 733L, 546L), X73 = c(960L, 315L, 208L, 850L, 46L, 969L, 928L, 171L, 364L, 641L), Class = structure(c(2L, 1L, 1L, 2L, 2L, 2L, 1L, 2L, 2L, 1L), .Label = c("No", "Yes"), class = "factor")), .Names = c("id", "X1", "X73", "Class"), class = "data.frame", row.names = c(1L, 2L, 3L, 4L, 5L, 6L, 7L, 98L, 99L, 100L)) 

    ==X==============================================================X==

නිමැවුමේ මුළු කොටසම ලස්සන තනි දිගු රේඛාවකින් යුක්ත වන බව සලකන්න. මෙය SO ප්‍රශ්න පෝස්ට් කියවීම පහසු කරවන අතර පිටපත් + පේස්ට් කිරීමද පහසු කරයි.


2013 ඔක්තෝබර් යාවත්කාලීන කරන්න:

පෙළ ප්‍රතිදානයේ පේළි කීයක් ගතවේදැයි ඔබට දැන් නියම කළ හැකිය (එනම්, ඔබ StackOverflow තුළට අලවන්නේ කුමක්ද). මේ lines.out=nසඳහා තර්කය භාවිතා කරන්න . උදාහරණයක්:

reproduce(DF, cols=c(1:3, 17, 23), lines.out=7) අස්වැන්න:

    ==X==============================================================X==
         Copy+Paste this part. (If on a Mac, it is already copied!)
    ==X==============================================================X==

 DF <- structure(list(id = structure(c(1L, 1L, 1L, 1L, 2L, 2L, 2L, 25L,25L, 25L), .Label
      = c("A", "B", "C", "D", "E", "F", "G", "H","I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U","V", "W", "X", "Y"), class = "factor"),
      X1 = c(809L, 81L, 862L,747L, 224L, 721L, 310L, 53L, 853L, 642L),
      X2 = c(926L, 409L,825L, 702L, 803L, 63L, 319L, 941L, 598L, 830L),
      X16 = c(447L,164L, 8L, 775L, 471L, 196L, 30L, 420L, 47L, 327L),
      X22 = c(335L,164L, 503L, 407L, 662L, 139L, 111L, 721L, 340L, 178L)), .Names = c("id","X1",
      "X2", "X16", "X22"), class = "data.frame", row.names = c(1L,2L, 3L, 4L, 5L, 6L, 7L, 98L, 99L, 100L))

    ==X==============================================================X==

196

මෙන්න හොඳ මඟ පෙන්වීමක් .

වැදගත්ම කරුණ නම්: ගැටලුව කුමක්දැයි බැලීමට අපට ධාවනය කළ හැකි කුඩා කේත කැබැල්ලක් සෑදීමට වග බලා ගන්න . මේ සඳහා ප්‍රයෝජනවත් කාර්යයක් වන්නේ dput(), නමුත් ඔබට ඉතා විශාල දත්ත තිබේ නම්, ඔබට කුඩා නියැදි දත්ත කට්ටලයක් සෑදීමට අවශ්‍ය විය හැකිය, නැතහොත් පළමු පේළි 10 හෝ ඊට වැඩි ප්‍රමාණයක් භාවිතා කරන්න.

සංස්කරණය කරන්න:

ගැටලුව ඔබම සිටින ස්ථානය ඔබ හඳුනාගෙන ඇති බවට වග බලා ගන්න. උදාහරණය "200 වන පේළියේ දෝෂයක් ඇත" සහිත සම්පූර්ණ R පිටපතක් නොවිය යුතුය. ඔබ R (I love browser()) සහ Google හි නිදොස් කිරීමේ මෙවලම් භාවිතා කරන්නේ නම් , ගැටලුව කොතැනදැයි සැබවින්ම හඳුනා ගැනීමටත්, එකම දෙය වැරදී යන සුළු උදාහරණයක් ප්‍රතිනිෂ්පාදනය කිරීමටත් ඔබට හැකි විය යුතුය.


165

R-help තැපැල් ලැයිස්තුවේ පෝස්ට් කිරීමේ මාර්ගෝපදේශයක් ඇත, එය දත්ත උත්පාදනය කිරීමේ උදාහරණයක් ද ඇතුළුව ප්‍රශ්න ඇසීම සහ පිළිතුරු දීම යන දෙකම ආවරණය කරයි:

උදාහරණ: සමහර විට යමෙකුට සැබවින්ම ධාවනය කළ හැකි කුඩා උදාහරණයක් සැපයීමට එය උපකාරී වේ. උදාහරණයක් වශයෙන්:

මට පහත පරිදි x න්‍යාසයක් තිබේ නම්:

  > x <- matrix(1:8, nrow=4, ncol=2,
                dimnames=list(c("A","B","C","D"), c("x","y"))
  > x
    x y
  A 1 5
  B 2 6
  C 3 7
  D 4 8
  >

පේළි 8 කින් යුත් දත්ත රාමුවක් සහ 'පේළිය', 'කොල්' සහ 'අගය' යන තීරු තුනක්, 'පේළිය' සහ 'කොල්' යන අගයන් ලෙස මාන නම් ඇති, මේ ආකාරයට:

  > x.df
     row col value
  1    A   x      1

...
(පිළිතුර විය හැක්කේ:

  > x.df <- reshape(data.frame(row=rownames(x), x), direction="long",
                    varying=list(colnames(x)), times=colnames(x),
                    v.names="value", timevar="col", idvar="row")

)

කුඩා යන වචනය විශේෂයෙන් වැදගත් වේ. ඔබ අවම ප්‍රජනනය කළ හැකි උදාහරණයක් සඳහා ඉලක්ක කළ යුතුය , එයින් අදහස් වන්නේ ගැටළුව පැහැදිලි කිරීම සඳහා දත්ත සහ කේතය හැකි තරම් සරල විය යුතු බවයි.

සංස්කරණය කරන්න: කැත කේතයට වඩා ලස්සන කේතය කියවීමට පහසුය. මෝස්තර මාර්ගෝපදේශයක් භාවිතා කරන්න .


164

R.2.14 සිට (මම හිතන්නේ) ඔබට ඔබේ දත්ත පෙළ නිරූපණය කෙලින්ම පෝෂණය කළ හැකිය read.table:

 df <- read.table(header=TRUE, 
  text="Sepal.Length Sepal.Width Petal.Length Petal.Width Species
1          5.1         3.5          1.4         0.2  setosa
2          4.9         3.0          1.4         0.2  setosa
3          4.7         3.2          1.3         0.2  setosa
4          4.6         3.1          1.5         0.2  setosa
5          5.0         3.6          1.4         0.2  setosa
6          5.4         3.9          1.7         0.4  setosa
") 

3
b සෙබස්තියන්-සී ප්‍රජනනය කළ හැකි ආදර්ශයක් කිරීම සඳහා එය හොඳ වන්නේ කෙසේද ?? :)
ටීඑම්එස්

MSTMS එය බැරෑරුම් ලෙස සිතීම, අසන්නා විසින් දත්ත සපයා ඇති අතර ගැටළුව කුඩා නම් (නමුත් විසඳුම් කිහිපයක් තිබිය හැකිය), එවිට එය වේගවත් විය හැකි අතර ඔබට තවමත් සියලු පියවර අනුගමනය කළ හැකිය.
සෙබස්තියන්-සී

146

සමහර විට ගැටලුව කුඩා දත්ත කැබැල්ලකින් ප්‍රතිනිෂ්පාදනය කළ නොහැක, ඔබ කොතරම් උත්සාහ කළත් කෘතිම දත්ත සමඟ එය සිදු නොවේ ( ගැටලුව ප්‍රතිනිෂ්පාදනය නොකළ කෘතිම දත්ත කට්ටල ඔබ නිෂ්පාදනය කළ ආකාරය පෙන්වීමට එය ප්‍රයෝජනවත් වුවද , එය සමහර උපකල්පන බැහැර කරයි).

  • දත්ත කොතැනක හෝ වෙබයට පළ කිරීම සහ URL එකක් සැපයීම අවශ්‍ය විය හැකිය.
  • දත්ත විශාල වශයෙන් මහජනයාට මුදා හැරිය නොහැකි නමුත් කිසිසේත් බෙදාගත නොහැකි නම්, ඔබට එය උනන්දුවක් දක්වන පාර්ශ්වයන්ට විද්‍යුත් තැපැල් කිරීමට ඉදිරිපත් විය හැකිය (මෙය වැඩ කිරීමට කරදර වන පුද්ගලයින්ගේ සංඛ්‍යාව අඩු කරනු ඇත එය මත).
  • මෙය සත්‍ය වශයෙන්ම මා දැක නැත, මන්ද ඔවුන්ගේ දත්ත මුදා හැරීමට නොහැකි පුද්ගලයින් එය ඕනෑම ආකාරයකින් මුදා හැරීම පිළිබඳව සංවේදී වන නමුත් සමහර අවස්ථාවලදී ප්‍රමාණවත් ලෙස නිර්නාමික / සීරීමට / දූෂිත වූවා නම් යමෙකුට තවමත් දත්ත පළ කළ හැකි බව පෙනේ. යම් ආකාරයකින්.

ඔබට මේ කිසිවක් කළ නොහැකි නම් ඔබේ ගැටලුව විසඳීම සඳහා උපදේශකයෙකු බඳවා ගත යුතුය ...

සංස්කරණය කරන්න : නිර්නාමිකකරණය / සීරීම සඳහා ප්‍රයෝජනවත් SO ප්‍රශ්න දෙකක්:


1
කෘතිම දත්ත කට්ටල නිපදවීම සඳහා, මෙම ප්‍රශ්නයට පිළිතුරුfitdistr සහ යෙදුම් ඇතුළුව ප්‍රයෝජනවත් උදාහරණ ලබා දේ fitdistrplus.
අයිටරේටර්

137

මේ දක්වා ඇති පිළිතුරු පැහැදිලිවම ප්‍රජනන හැකියාව සඳහා විශිෂ්ටයි. මෙය හුදෙක් ප්‍රජනනය කළ හැකි උදාහරණයකට ප්‍රශ්නයක එකම අංගය විය නොහැකි හා නොවිය යුතු බව පැහැදිලි කිරීම සඳහා ය. ඔබ මෙතෙක් එහි යාමට උත්සාහ කළ ආකාරය පමණක් නොව, ඔබේ පෙනුම කුමක් විය යුතුද යන්න සහ ඔබේ ගැටලුවේ සමෝච්ඡයන් පැහැදිලි කිරීමට අමතක නොකරන්න. කේතය ප්රමාණවත් නොවේ; ඔබට වචන ද අවශ්‍යයි.

කිරීමෙන් වැළකී සිටිය යුතු දේ පිළිබඳ ප්‍රජනනය කළ හැකි උදාහරණයක් මෙන්න (සැබෑ උදාහරණයකින් උපුටා ගත්, අහිංසකයින් ආරක්ෂා කිරීම සඳහා නම් වෙනස් කර ඇත):


පහත දැක්වෙන්නේ නියැදි දත්ත සහ ක්‍රියාකාරීත්වයේ කොටසක් මට කරදරයකි.

code
code
code
code
code (40 or so lines of it)

මට මෙය සාක්ෂාත් කරගත හැක්කේ කෙසේද?



124

ඉහත සඳහන් නොකළ R උදාහරණයක් සෑදීමට මට ඉතා පහසු හා කාර්යක්ෂම ක්‍රමයක් තිබේ. ඔබට මුලින්ම ඔබේ ව්‍යුහය අර්ථ දැක්විය හැකිය. උදාහරණයක් වශයෙන්,

mydata <- data.frame(a=character(0), b=numeric(0),  c=numeric(0), d=numeric(0))

>fix(mydata)

ඔබ 'fix' විධානය ක්‍රියාත්මක කරන විට, ඔබට මෙම උත්පතන කොටුව ලැබෙනු ඇත

එවිට ඔබට ඔබේ දත්ත අතින් ඇතුල් කළ හැකිය. විශාල ඒවාට වඩා කුඩා උදාහරණ සඳහා මෙය කාර්යක්ෂම වේ.


18
... එහෙනම්dput(mydata)
GSee

ඔබේ ඉදිරිපස කොටස කුමක්ද? සම්පූර්ණ පිළිතුරක් තිබීම සතුටක්. Etc ඔබට කෙලින්ම ලූප කළ හැකි දත්ත සාදන්න for (d in data) {...}.
Léo Léopold Hertz 준영

119

dputඔබේ දත්ත ඉක්මණින් නිර්මාණය කිරීම සඳහා ඔබට ඔබේ ක්ලිප් පුවරුවට දත්ත පිටපත් කර (කෑල්ලක්) ගෙන පහත සඳහන් දෑ R හි ධාවනය කළ හැකිය:

එක්සෙල් හි දත්ත සඳහා:

dput(read.table("clipboard",sep="\t",header=TRUE))

txt ගොනුවක දත්ත සඳහා:

dput(read.table("clipboard",sep="",header=TRUE))

sepඅවශ්‍ය නම් ඔබට දෙවැන්න වෙනස් කළ හැකිය . මෙය ක්‍රියාත්මක වන්නේ ඔබගේ දත්ත ක්ලිප් පුවරුවේ තිබේ නම් පමණි.


116

මාර්ගෝපදේශ:


ඔබේ ප්‍රශ්න සැකසීමේ ඔබේ ප්‍රධාන පරමාර්ථය විය යුත්තේ පා system කයන්ට ඔවුන්ගේ පද්ධති පිළිබඳ ඔබේ ගැටලුව තේරුම් ගැනීමට සහ ප්‍රතිනිෂ්පාදනය කිරීමට හැකි තරම් පහසු කිරීමයි. එසේ කිරීමට:

  1. ආදාන දත්ත සපයන්න
  2. අපේක්ෂිත ප්‍රතිදානය සපයන්න
  3. ඔබේ ගැටලුව කෙටියෙන් පැහැදිලි කරන්න
    • ඔබට පෙළ + කේත පේළි 20 කට වඩා තිබේ නම් ඔබට ආපසු ගොස් සරල කළ හැකිය
    • ගැටළුව / දෝෂය ආරක්ෂා කරමින් ඔබේ කේතය හැකිතාක් සරල කරන්න

මෙය යම් වැඩක් කළ යුතු නමුත් ඔබ වෙනුවෙන් වැඩ කිරීමට අන් අයගෙන් ඉල්ලා සිටින බැවින් එය සාධාරණ වෙළඳාමක් ලෙස පෙනේ.

දත්ත සැපයීම:


බිල්ට් දත්ත කට්ටල

හොඳම විකල්පය බොහෝ දුරට බිල්ට් හැකි දත්ත මත රඳා කිරීමයි. මෙය ඔබගේ ගැටලුව විසඳීමට අන් අයට පහසු කරයි. data()ඔබට ලබා ගත හැකි දත්ත මොනවාදැයි බැලීමට R විමසුමේ ටයිප් කරන්න. සමහර සම්භාව්‍ය උදාහරණ:

  • iris
  • mtcars
  • ggplot2::diamonds (බාහිර පැකේජය, නමුත් සෑම කෙනෙකුටම පාහේ එය ඇත)

ඔබේ ගැටලුවට ගැලපෙන දත්ත කට්ටල සොයා ගන්නේ කෙසේද යන්න සඳහා මෙම SO QA බලන්න .

සාදන ලද දත්ත කට්ටල භාවිතා කිරීම සඳහා ඔබේ ගැටලුව නැවත මුද්‍රණය කිරීමට ඔබට හැකි නම්, ඔබට හොඳ පිළිතුරු (සහ ඉහළ) ලබා ගැනීමට බොහෝ දුරට ඉඩ ඇත.

ස්වයං ජනනය කළ දත්ත

ඔබගේ ගැටළුව පවත්නා දත්ත කට්ටලවල නිරූපණය නොවන දත්ත වර්ගයකට ඉතා නිශ්චිත නම්, ඔබේ ගැටළුව මතුවන හැකි කුඩාම දත්ත කට්ටලය ජනනය කරන R කේතය සපයන්න . උදාහරණයක් වශයෙන්

set.seed(1)  # important to make random data reproducible
myData <- data.frame(a=sample(letters[1:5], 20, rep=T), b=runif(20))

දැන් මගේ ප්‍රශ්නයට පිළිතුරු දීමට උත්සාහ කරන කෙනෙකුට එම පේළි දෙක පිටපත් කිරීමට / ඇලවීමට සහ ගැටලුව විසඳීමට වහාම පටන් ගත හැකිය.

dput

ලෙස , පසුගිය සිකුරාදා , ඔබ භාවිතා කළ හැකිය dputආර් කේතය (උදා: කිරීමට දත්ත වස්තුව බවට පත් කර ගැනීමට dput(myData)). මම "අවසාන උපක්‍රමයක්" ලෙස dputකියන්නේ ප්‍රතිදානය බොහෝ විට තරමක් නොසැලකිලිමත්, පිටපත්-පේස්ට් කිරීමට කරදරයක් වන අතර ඔබේ ඉතිරි ප්‍රශ්නය අපැහැදිලි බැවිනි.

අපේක්ෂිත ප්‍රතිදානය සපයන්න:


කවුරුහරි වරක් පැවසුවේ:

අපේක්ෂිත ප්‍රතිදානයේ පින්තූරයක් වචන 1000 ක් වටී

- ඉතා බුද්ධිමත් පුද්ගලයෙක්

ඔබට "මම මෙම ප්‍රති result ලය ලබා ගැනීමට බලාපොරොත්තු වෙමි" වැනි යමක් එකතු කළ හැකි නම්:

   cyl   mean.hp
1:   6 122.28571
2:   4  82.63636
3:   8 209.21429

ඔබගේ ප්‍රශ්නයට, ඔබ කිරීමට උත්සාහ කරන්නේ කුමක්ද යන්න ජනතාව ඉක්මනින් තේරුම් ගැනීමට බොහෝ දුරට ඉඩ ඇත. ඔබ අපේක්ෂිත ප්‍රති result ලය විශාල හා නොසැලකිලිමත් නම්, ඔබේ ගැටලුව සරල කරන්නේ කෙසේද යන්න ගැන ඔබ ප්‍රමාණවත් ලෙස නොසිතන්නට ඇත (ඊළඟ බලන්න).

ඔබේ ගැටලුව කෙටියෙන් පැහැදිලි කරන්න


කළ යුතු ප්‍රධානම දෙය නම් ඔබ ඔබේ ප්‍රශ්නය ඇසීමට පෙර ඔබේ ගැටලුව හැකිතාක් සරල කිරීමයි. සාදන ලද දත්ත කට්ටල සමඟ වැඩ කිරීම සඳහා ගැටළුව නැවත සකස් කිරීම මේ සම්බන්ධයෙන් බොහෝ සෙයින් උපකාරී වේ. සරල කිරීමේ ක්‍රියාවලිය හරහා යාමෙන් ඔබ ඔබේම ගැටලුවට පිළිතුරු සපයන බව ඔබට බොහෝ විට පෙනී යනු ඇත.

හොඳ ප්‍රශ්න සඳහා උදාහරණ කිහිපයක් මෙන්න:

අවස්ථා දෙකේදීම, පරිශීලකයාගේ ගැටළු නිසැකවම ඔවුන් සපයන සරල උදාහරණ සමඟ නොවේ. ඒ වෙනුවට ඔවුන් ඔවුන්ගේ ගැටලුවේ ස්වභාවය සාරාංශ කොට ඔවුන්ගේ දත්ත ඇසීමට සරල දත්ත කට්ටලයකට යොදන ලදි.

මෙම ප්‍රශ්නයට තවත් පිළිතුරක් ලැබෙන්නේ ඇයි?


මෙම පිළිතුර හොඳම පුහුණුව ලෙස මා සිතන දේ කෙරෙහි අවධානය යොමු කරයි: සාදන ලද දත්ත කට්ටල භාවිතා කර අවම ස්වරූපයෙන් ඔබ අපේක්ෂා කරන දේ සපයන්න. වඩාත්ම කැපී පෙනෙන පිළිතුරු වෙනත් අංශ කෙරෙහි අවධානය යොමු කරයි. මෙම පිළිතුර කිසිදු ප්‍රසිද්ධියකට පත්වනු ඇතැයි මම අපේක්ෂා නොකරමි; මෙය තනිකරම මෙහි ඇති බැවින් නවක ප්‍රශ්න සඳහා අදහස් දැක්වීමේදී මට එය සම්බන්ධ කළ හැකිය.


113

උදව් ලබා ගැනීම සඳහා ප්‍රජනන කේතය ප්‍රධාන ය. කෙසේ වෙතත්, බොහෝ පරිශීලකයින් ඔවුන්ගේ දත්ත වලින් කොටසක් පවා ඇලවීම ගැන සැක කළ හැකිය. උදාහරණයක් ලෙස, ඒවා සංවේදී දත්ත සමඟ හෝ පර්යේෂණ පත්‍රිකාවක භාවිතා කිරීම සඳහා එකතු කරන ලද මුල් දත්ත මත වැඩ කළ හැකිය. ඕනෑම හේතුවක් නිසා, මගේ දත්ත ප්‍රසිද්ධියේ ඇලවීමට පෙර "විකෘති" කිරීම සඳහා පහසු කාර්යයක් තිබීම හොඳ යැයි මම සිතුවෙමි. මෙම anonymizeපැකේජය සිට උත්සවය SciencesPoඉතා මෝඩ, නමුත් මට එය සමඟ අවසරයෙන් වැඩ dputඋත්සවය.

install.packages("SciencesPo")

dt <- data.frame(
    Z = sample(LETTERS,10),
    X = sample(1:10),
    Y = sample(c("yes", "no"), 10, replace = TRUE)
)

> dt
   Z  X   Y
1  D  8  no
2  T  1 yes
3  J  7  no
4  K  6  no
5  U  2  no
6  A 10 yes
7  Y  5  no
8  M  9 yes
9  X  4 yes
10 Z  3  no

එවිට මම එය නිර්නාමික කරමි:

> anonymize(dt)
     Z    X  Y
1   b2  2.5 c1
2   b6 -4.5 c2
3   b3  1.5 c1
4   b4  0.5 c1
5   b7 -3.5 c1
6   b1  4.5 c2
7   b9 -0.5 c1
8   b5  3.5 c2
9   b8 -1.5 c2
10 b10 -2.5 c1

නිර්නාමිකකරණය සහ dput විධානය යෙදීමට පෙර සම්පූර්ණ දත්ත වෙනුවට විචල්යයන් කිහිපයක් නියැදි කිරීමට කෙනෙකුට අවශ්‍ය විය හැකිය.

    # sample two variables without replacement
> anonymize(sample.df(dt,5,vars=c("Y","X")))
   Y    X
1 a1 -0.4
2 a1  0.6
3 a2 -2.4
4 a1 -1.4
5 a2  3.6

102

බොහෝ විට ඔබට උදාහරණයක් සඳහා යම් දත්තයක් අවශ්‍ය වේ, කෙසේ වෙතත්, ඔබේ නිශ්චිත දත්ත පළ කිරීමට ඔබට අවශ්‍ය නැත. ස්ථාපිත පුස්තකාලයේ පවතින සමහර data.frame භාවිතා කිරීමට, එය ආනයනය කිරීමට දත්ත විධානය භාවිතා කරන්න.

උදා:

data(mtcars)

ඉන්පසු ගැටලුව කරන්න

names(mtcars)
your problem demostrated on the mtcars data set

13
බොහෝ බිල්ට් දත්ත කට්ටල (ජනප්‍රිය වැනි) mtcars සහ irisදත්ත කට්ටල වැනි) ඇත්ත වශයෙන්ම dataඇමතුම භාවිතා කිරීමට අවශ්‍ය නොවේ .
ග්‍රෙගර් තෝමස්

92

ඔබට විශාල දත්ත කට්ටලයක් තිබේ නම් එය පහසුවෙන් ස්ක්‍රිප්ටයට දැමිය නොහැක dput(), ඔබේ දත්ත පේස්ට්බින් වෙත පළ කර ඒවා භාවිතයෙන් පටවන්නread.table :

d <- read.table("http://pastebin.com/raw.php?i=m1ZJuKLH")

En හෙන්රික් විසින් දේවානුභාවයෙන් .


90

මම සංවර්ධනය කරනවා ප්‍රජනනය කළ හැකි දත්ත ඉක්මණින් බෙදා ගැනීම සඳහා මෙම අවශ්‍යතාව සපුරාලීම සඳහා වේක්ෆීල්ඩ් පැකේජය, සමහර විටdputකුඩා දත්ත කට්ටල සඳහා හොඳින් ක්‍රියා කරයි, නමුත් අප සමඟ කටයුතු කරන බොහෝ ගැටලු වඩා විශාල වන අතර, එතරම් විශාල දත්ත කට්ටලයක් බෙදාdputගැනීම ප්‍රායෝගික නැත.

ගැන:

දත්ත ප්‍රතිනිෂ්පාදනය සඳහා අවම කේත බෙදා ගැනීමට වේක්ෆීල්ඩ් පරිශීලකයාට ඉඩ දෙයි. පරිශීලකයාnදත්ත (ස්ත්‍රී පුරුෂ භාවය, වයස, ආදායම වැනි දේ) සැබෑ ලෙස අනුකරණය කරන පෙර සැකසූ විචල්‍ය ශ්‍රිත ගණනක් (දැනට 70 ක් ඇත) නියම කරයි.

ස්ථාපනය:

දැනට (2015-06-11), වේක්ෆීල්ඩ් යනු GitHub පැකේජයක් වන නමුත් ඒකක පරීක්ෂණ ලිවීමෙන් පසුව CRAN වෙත යනු ඇත. ඉක්මනින් ස්ථාපනය කිරීමට, භාවිතා කරන්න:

if (!require("pacman")) install.packages("pacman")
pacman::p_load_gh("trinker/wakefield")

උදාහරණයක්:

මෙන්න උදාහරණයක්:

r_data_frame(
    n = 500,
    id,
    race,
    age,
    sex,
    hour,
    iq,
    height,
    died
)

මෙය නිෂ්පාදනය කරයි:

    ID  Race Age    Sex     Hour  IQ Height  Died
1  001 White  33   Male 00:00:00 104     74  TRUE
2  002 White  24   Male 00:00:00  78     69 FALSE
3  003 Asian  34 Female 00:00:00 113     66  TRUE
4  004 White  22   Male 00:00:00 124     73  TRUE
5  005 White  25 Female 00:00:00  95     72  TRUE
6  006 White  26 Female 00:00:00 104     69  TRUE
7  007 Black  30 Female 00:00:00 111     71 FALSE
8  008 Black  29 Female 00:00:00 100     64  TRUE
9  009 Asian  25   Male 00:30:00 106     70 FALSE
10 010 White  27   Male 00:30:00 121     68 FALSE
.. ...   ... ...    ...      ... ...    ...   ...

72

ඔබට factorප්‍රතිනිෂ්පාදනය කිරීමට අවශ්‍ය ඔබේ දත්තවල විචල්‍ය එකක් හෝ කිහිපයක් තිබේ නම්, එයට dput(head(mydata))එකතු droplevelsකිරීම සලකා බලන්න , එවිට අවම දත්ත කට්ටලයේ නොමැති සාධක මට්ටම් ඔබේ dputප්‍රතිදානයට ඇතුළත් නොවේ . උදාහරණය අවම කරන්න :

dput(droplevels(head(mydata)))

65

Http://old.r-fiddle.org/ සබැඳියක් ගැටළුවක් බෙදාහදා ගැනීම සඳහා ඉතා පිළිවෙලක් විය හැකිදැයි මම කල්පනා කරමි . එයට අද්විතීය හැඳුනුම්පතක් ලැබෙන අතර එය SO හි කාවැද්දීම ගැන කෙනෙකුට සිතිය හැකිය.


47

කරුණාකර ඔබේ කොන්සෝල ප්‍රතිදානයන් මේ ආකාරයට අලවන්න එපා:

If I have a matrix x as follows:
> x <- matrix(1:8, nrow=4, ncol=2,
            dimnames=list(c("A","B","C","D"), c("x","y")))
> x
  x y
A 1 5
B 2 6
C 3 7
D 4 8
>

How can I turn it into a dataframe with 8 rows, and three
columns named `row`, `col`, and `value`, which have the
dimension names as the values of `row` and `col`, like this:
> x.df
    row col value
1    A   x      1
...
(To which the answer might be:
> x.df <- reshape(data.frame(row=rownames(x), x), direction="long",
+                varying=list(colnames(x)), times=colnames(x),
+                v.names="value", timevar="col", idvar="row")
)

අපට එය කෙලින්ම පිටපත්-ඇලවිය නොහැක.

ප්‍රශ්න සහ පිළිතුරු නිසි ලෙස ප්‍රතිනිෂ්පාදනය කළ හැකි නම්, එය ඉවත් කිරීමට +සහ >පළ කිරීමට පෙර උත්සාහ කර #ප්‍රතිදානයන් සහ අදහස් දැක්වීමට උත්සාහ කරන්න :

#If I have a matrix x as follows:
x <- matrix(1:8, nrow=4, ncol=2,
            dimnames=list(c("A","B","C","D"), c("x","y")))
x
#  x y
#A 1 5
#B 2 6
#C 3 7
#D 4 8

# How can I turn it into a dataframe with 8 rows, and three
# columns named `row`, `col`, and `value`, which have the
# dimension names as the values of `row` and `col`, like this:

#x.df
#    row col value
#1    A   x      1
#...
#To which the answer might be:

x.df <- reshape(data.frame(row=rownames(x), x), direction="long",
                varying=list(colnames(x)), times=colnames(x),
                v.names="value", timevar="col", idvar="row")

තවත් එක් දෙයක් නම්, ඔබ යම් පැකේජයකින් කිසියම් ශ්‍රිතයක් භාවිතා කර ඇත්නම්, එම පුස්තකාලය සඳහන් කරන්න.


2
ඔබ එය ඉවත් කර අතින් >එකතු #කරනවාද? නැතහොත් එය කිරීමට ස්වයංක්‍රීය ක්‍රමයක් තිබේද?
BCArg

3
@BCArg මම >අතින් ඉවත් කරමි . නමුත්, එකතු කිරීම සඳහා #, මම සංස්කාරකයේ Ctrl+Shift+Cකෙටිමං භාවිතා කරමි RStudio.
user2100721

33

ඔබට මෙය rerex භාවිතයෙන් කළ හැකිය .

ලෙස mt1022 සඳහන් , "අවම නිෂ්පාදනය කිරීම සඳහා වන ... හොඳ පැකේජය, ප්රතිනිෂ්පාදනය උදාහරණයක් " reprex " සිට tidyverse ".

Tidyverse ට අනුව :

“රෙප්‍රෙක්ස්” හි පරමාර්ථය වන්නේ ඔබේ ගැටළු සහගත කේතය අනෙක් පුද්ගලයින්ට ක්‍රියාත්මක කර ඔබේ වේදනාව දැනෙන අයුරින් ඇසුරුම් කිරීමයි.

උදම් වෙබ් අඩවියේ උදාහරණයක් ලබා දී ඇත .

library(reprex)
y <- 1:4
mean(y)
reprex() 

ප්‍රජනනය කළ හැකි ආදර්ශයක් නිර්මාණය කිරීමේ සරලම ක්‍රමය මෙය යැයි මම සිතමි .


33

ඉහත සඳහන් සියලු පිළිතුරු වලට අමතරව, මෙහි සාකච්ඡා කර ඇති පරිදි සමහර විට එය ඉතා පහසු විය හැකිය: - ආර් සමඟ උදව් ලබා ගැනීම සඳහා අවම වශයෙන් ප්‍රතිනිර්මාණය කළ හැකි ආදර්ශයක් කරන්නේ කෙසේද?

සසම්භාවී දෛශිකයක් සෑදීමට බොහෝ ක්‍රම තිබේ R හි අහඹු අගයන් සහිත අංක 100 දෛශිකයක් R වටකුරු දශම 2 ක් හෝ R හි අහඹු අනුකෘතියක් සාදන්න

mydf1<- matrix(rnorm(20),nrow=20,ncol=5)

මානයන් වැනි විවිධ හේතූන් නිසා සමහර විට දී ඇති දත්ත බෙදා ගැනීම ඉතා අපහසු බව සලකන්න. කෙසේ වෙතත්, ඉහත සඳහන් සියලු පිළිතුරු ප්‍රජනනය කළ හැකි දත්ත ආදර්ශයක් කිරීමට අවශ්‍ය වූ විට සිතීමට හා භාවිතා කිරීමට ඉතා වැදගත් වේ. නමුත් දත්තයක් මුල් පිටපත ලෙස නියෝජිතයෙකු බවට පත් කිරීම සඳහා (OP හට මුල් දත්ත බෙදාගත නොහැකි නම්), දත්ත උදාහරණය සමඟ යම් තොරතුරු එක් කිරීම හොඳය (අපි දත්ත mydf1 ලෙස හැඳින්වුවහොත්)

class(mydf1)
# this shows the type of the data you have 
dim(mydf1)
# this shows the dimension of your data

එපමණක් නොව, දත්ත ව්‍යුහයන් විය හැකි දත්තයක වර්ගය, දිග සහ ගුණාංග දැන සිටිය යුතුය

#found based on the following 
typeof(mydf1), what it is.
length(mydf1), how many elements it contains.
attributes(mydf1), additional arbitrary metadata.

#If you cannot share your original data, you can str it and give an idea about the structure of your data
head(str(mydf1))

28

මෙන්න මගේ යෝජනා කිහිපයක්:

  • සුපුරුදු R දත්ත කට්ටල භාවිතා කිරීමට උත්සාහ කරන්න
  • ඔබට ඔබේම දත්ත කට්ටලයක් තිබේ නම්, ඒවා සමඟ ඇතුළත් කරන්න dput, එවිට අනෙක් අයට ඔබට වඩාත් පහසුවෙන් උදව් කළ හැකිය
  • install.package()එය සැබවින්ම අවශ්‍ය නම් මිස භාවිතා නොකරන්න, ඔබ භාවිතා කරන්නේ නම් requireහෝ තේරුම් ගත හැකියlibrary
  • සංක්ෂිප්ත වීමට උත්සාහ කරන්න,

    • දත්ත කට්ටලයක් තබා ගන්න
    • ඔබට අවශ්‍ය ප්‍රතිදානය හැකිතාක් සරලව විස්තර කිරීමට උත්සාහ කරන්න
    • ඔබ ප්‍රශ්නය ඇසීමට පෙර එය ඔබම කරන්න
  • පින්තූරයක් උඩුගත කිරීම පහසුය, එබැවින් ඔබට තිබේ නම් බිම් කැබලි උඩුගත කරන්න
  • ඔබට ඇතිවිය හැකි දෝෂ ද ඇතුළත් කරන්න

මේ සියල්ල ප්‍රජනනය කළ හැකි උදාහරණයක කොටසකි.


1
ඔබ මෙහි ඇත්ත වශයෙන්ම කිසිවක් එකතු කර නැත. dput()කලින් සඳහන් කර ඇති අතර, මෙයින් බොහොමයක් සම්මත SO මාර්ගෝපදේශ නැවත අවධාරණය කිරීමකි.
පොහොසත් Scriven

1
install.packageඇත්ත වශයෙන්ම අවශ්‍ය නොවන (මගේ මතය අනුව) උදාහරණයේ ඇතුළත් කර ඇති ක්‍රියාකාරිත්වය පිළිබඳ මට ගැටලුවක් තිබුණි . තවද, පෙරනිමි R දත්ත කට්ටලය භාවිතා කිරීමෙන් ප්‍රජනනය පහසු වේ. SO මාර්ගෝපදේශ මෙම මාතෘකා ගැන විශේෂයෙන් කිසිවක් කතා කර නැත. තව දුරටත්, එය මගේ මතය ඉදිරිපත් කිරීමට අදහස් කරන ලද අතර මේවා මට වඩාත්ම හමු වූ ඒවාය.
TheRimalaya

18

testthatඔබ සිදුවීමට අපේක්ෂා කරන දේ පෙන්වීමට පැකේජයේ කාර්යයන් භාවිතා කිරීම හොඳ අදහසකි . මේ අනුව, අනෙක් අයට ඔබගේ කේතය දෝෂයකින් තොරව ක්‍රියාත්මක වන තෙක් වෙනස් කළ හැකිය. මෙය ඔබට උදව් කිරීමට කැමති අයගේ බර ලිහිල් කරයි, එයින් අදහස් කරන්නේ ඔවුන් ඔබේ පා description විස්තරය විකේතනය කළ යුතු නැති බවයි. උදාහරණයක් වශයෙන්

library(testthat)
# code defining x and y
if (y >= 10) {
    expect_equal(x, 1.23)
} else {
    expect_equal(x, 3.21)
}

"x යනු 10 ට සමාන හෝ ඊට වැඩි y සඳහා 1.23 ක් වනු ඇති අතර වෙනත් ආකාරයකින් 3.21 ක් වනු ඇත, නමුත් මට කිසිදු ප්‍රති .ලයක් නොලැබුණි". මෙම මෝඩ උදාහරණයේ දී පවා, කේතය වචනවලට වඩා පැහැදිලි ය. භාවිතා කිරීමෙන් testthatඔබේ සහායකයාට කේතය කෙරෙහි අවධානය යොමු කිරීමට ඉඩ සලසයි, එය කාලය ඉතිරි කරයි, තවද ඔවුන් එය පළ කිරීමට පෙර ඔවුන් ඔබේ ගැටලුව විසඳා ඇති බව දැන ගැනීමට එය මාර්ගයක් සපයයි

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.