Подмножество в функции - PullRequest
0 голосов
/ 04 апреля 2019

Я пытаюсь использовать функцию подмножества в функции, которую я создал. Однако по какой-то причине он продолжает выдавать ошибку «Не найден объект» (даже если тот же объект находится вне функции). пример кода:

#import dataframe:
df <- read.csv("/home/df.csv")
#create function with subset in it:
function_w_subset = function(object_type) {
df1 = subset(df, object_type ==0, select = labels)}
#apply function:
df1 = function_w_subset(barrels)

Что выдает ошибку: Ошибка в eval (подставить (expr), data, enclos = parent.frame ()): объект 'barrels' не найден

Тот же объект вне функции, он отлично работает ...

df2 = subset(df, barrels ==0, select = labels) #this works!

Я попытался воспроизвести ошибку на воспроизводимом примере. Но по какой-то причине в примере это работает нормально!?

desks <- c(0, 1, 2, 3)
barrels <- c(3, 2, 1, 0) 
labels <- c("A", "A", "B", "B")

df <- data.frame(labels, desks, barrels)

df1 = subset(df, barrels ==0, select = labels)

subset_function = function(object_type) {
  df = subset(df, object_type ==0, select = labels)
  df
}

df2 = subset_function(barrels)

Есть идеи, почему возникает эта ошибка, или альтернативная стратегия для подмножества внутри функции? Я пробовал функцию с (). например,

with(df, labels[barrels==0])

Который снова работает вне функции, но не внутри ...

1 Ответ

0 голосов
/ 04 апреля 2019

Вы должны быть осведомлены о сфере охвата. Внутри вашей функции это как отдельная комната, а внутри функции не знает, что снаружи. Например, вы используете переменную с именем "df" внутри вашей функции. Но если вы загляните внутрь своей функции, совершенно неясно, откуда взялась эта переменная. То же самое касается "бочек". Повторяю, подумайте о масштабах ваших функций и остальной части кода.

...