Ich möchte eine Funktion schreiben, die n Stichproben eines Datensatzes ohne Ersatz erstellt.R: Warum erstellt meine Funktion keine Objekte in meiner Umgebung?
In diesem Beispiel verwende ich den Iris-Datensatz. Die Iris-Datensatz hat 150 Beobachtungen und sagen, ich will 10 Proben.
Mein Versuch:
#load libraries
library(dplyr)
# load the data
data(iris)
head(iris)
# name df
df = iris
# set the number of samples
n = 10
# assumption: the number of observations in df is divisible by n
# set the number of observations in each sample
m = nrow(df)/n
# create a column called row to contain initial row index
df$row = rownames(df)
# define the for loop
# that creates n separate data sets
# with m number of rows in each data set
for(i in 1:n){
# create the sample
sample = sample_n(df, m, replace = FALSE)
# name the sample 'dsi'
x = assign(paste("ds",i,sep=""),sample)
# remove 'dsi' from df
df = df[!(df$row %in% x$row),]
}
Wenn ich diesen Code ausführen ich bekommen, was ich will. Ich bekomme die Stichproben mit den Namen ds1, ds2, ..., ds10.
Jetzt, wenn ich versuche, es in eine Funktion zu aktivieren:
samplez <- function(df,n){
df$row = rownames(df)
m = nrow(df)/n
for(i in 1:n){
sample = sample_n(df, m, replace = FALSE)
x = assign(paste("ds",i,sep=""),sample)
df = df[!(df$row %in% x$row),]
}
}
Nichts passiert, wenn ich 'samplez (Iris, 10)' ausführen. Was vermisse ich?
Dank
Ihre Funktion wird einen Wert nicht zurück, wenn Sie nicht ausdrücklich eine Rückkehr. Fügen Sie beispielsweise zwischen den letzten beiden geschweiften Klammern "df" hinzu, um "df" an die übergeordnete Umgebung zurückzugeben. – eipi10
@ eipi10 true, weißt du, wie meine Proben in der Umgebung erscheinen? – Zyferion
Sie meinen, Sie wollen nicht nur 'df', sondern auch den Wert von' sample' für jede Iteration der Schleife zurückgeben? "X = assign (paste (" ds ", i, sep =" "), sample) ist übrigens nicht nötig". Dies entspricht "x = sample". Aber das ist auch nicht nötig, denn Sie können 'df = df [! (Df $ row% in% sample $ row)]'. – eipi10