【发布时间】:2019-08-26 10:49:11
【问题描述】:
我正在尝试在我创建的函数中使用子集函数。但是,由于某种原因,它不断给出未找到对象的错误(即使在函数之外找到了相同的对象)。 示例代码:
#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])
这同样适用于函数之外,但不在函数内......
【问题讨论】:
-
pachamaltese 发布了一个 Answer 说“请查看 Why is
[better thansubset? 的优秀答案,它指向一个完整详细的书籍章节 (http://adv-r.had.co.nz/Computing-on-the-language.html)”