2015-05-26 2 views
3

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

Короче говоря, я использую ddply внутри функции и пытаюсь передать аргумент функции функции ddply.

Упрощенный пример с использованием набора данных iris

IG_test <-function(data, feature){ 
    dd<-ddply(data, feature, here(summarise), N=length(feature)) 
    return(dd) 
} 

IG_test(iris, "Species") 

Это должно возвращать количество записей для каждого вида, а возвращает 1 в каждом случае.

Если я указываю «вид» непосредственно в length(), я получаю то, что я ищу

IG_test <-function(data, feature){ 
    dd<-ddply(data, feature, here(summarise), N=length(Species)) 
    return(dd) 
} 

    IG_test(iris, "Species") 

    Species N 
1  setosa 50 
2 versicolor 50 
3 virginica 50 

Самые последние вопросы, описывающие подобные проблемы предлагают использовать here() для summarize() функции в ddply, чтобы сказать ddply, где искать переменную. это работает так же, как feature (без here() мы получаем ошибку), однако он не возвращает длину, как ожидалось.

Любые идеи?

ответ

2

Вы вводите имя строки «Виды» в функцию ddply. Таким образом, вы должны получить его значение внутри. Затем ddply признайте название колонки

library(plyr) 
IG_test <-function(data, feature){ 
    dd<-ddply(data, feature, here(summarise), N=length(get(feature))) 
    return(dd) 
} 

IG_test(iris, "Species") 
+0

замечательный! это именно то, что я искал, спасибо. Спасибо за объяснение. – philjet

+0

добро пожаловать! –

Смежные вопросы