【问题标题】:Subsetting within function函数内的子集
【发布时间】: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])

这同样适用于函数之外,但不在函数内......

【问题讨论】:

标签: r function subset


【解决方案1】:

您需要了解范围。在您的功能内部,它就像一个单独的房间,功能内部不知道外面是什么。例如,您在函数中使用名称为“df”的变量。但是如果你只看你的函数内部,就完全不清楚这个变量来自哪里。 “桶”也是如此。我再说一遍,想想你的函数和其余代码的范围。

【讨论】:

    猜你喜欢
    • 2020-04-02
    • 1970-01-01
    • 2020-07-29
    • 2020-12-15
    • 2019-08-02
    • 1970-01-01
    • 2013-12-08
    • 2022-11-02
    相关资源
    最近更新 更多