Я сталкиваюсь с проблемой, когда использую оператор извлечения `$() внутри функции. Проблема не существует, если я следую той же логике за пределами цикла, поэтому я предполагаю, что может быть проблема с областью действия, о которой я не знаю.
Общая установка:
## Make some fake data for your reproducible needs.
set.seed(2345)
my_df <- data.frame(cat_1 = sample(c("a", "b"), 100, replace = TRUE),
cat_2 = sample(c("c", "d"), 100, replace = TRUE),
continuous = rnorm(100),
stringsAsFactors = FALSE)
head(my_df)
Этот процесс я пытаюсь динамически воспроизвести:
index <- which(`$`(my_df, "cat_1") == "a")
my_df$continuous[index]
Но как только я программирую эту логику в функцию, она терпит неудачу:
## Function should take a string for the following:
## cat_var - string with the categorical variable name as it appears in df
## level - a level of cat_var appearing in df
## df - data frame to operate on. Function assumes it has a column
## "continuous".
extract_sample <- function(cat_var, level, df = my_df) {
index <- which(`$`(df, cat_var) == level)
df$continuous[index]
}
## Does not work.
extract_sample(cat_var = "cat_1", level = "a")
Это возвращает numeric(0)
. Любые мысли о том, что мне не хватает? Приветствуются и альтернативные подходы.
extract_sample = function(var, val, df = my_df) merge(df, setNames(data.frame(val), var), all.y=TRUE)
или что-то подобное. - person Frank   schedule 26.04.2018