功能内的子集

时间:2019-04-04 15:42:06

标签: r function subset

我正在尝试在我创建的函数中使用子集函数。但是,由于某种原因,它始终会给未找到对象提供错误(即使在函数外部找到了相同的对象)。 示例代码:

#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(substitute(expr),data,enclos = parent.frame())中的错误:找不到对象“桶”

功能之外的相同对象可以正常工作...

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()函数。例如

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

这又可以在函数外部工作,但不能在...之外工作

1 个答案:

答案 0 :(得分:-1)

您需要了解范围。函数内部就像一个单独的房间,函数内部不知道外部是什么。例如,您在函数内使用名称为“ df”的变量。但是,如果只看函数内部,则完全不清楚此变量的来源。 “桶”也是如此。我重复一遍,考虑一下您的功能范围和其余代码。