Как использовать список в качестве аргумента в функции в R - PullRequest
0 голосов
/ 27 июня 2018

myfunction<-function(x){if (x=="g"){g_var<-x g_nvar<-length(g_var)} return(g_nvar)}

Я написал вышеописанный скрипт для получения определенных элементов из списка. Аргумент x будет списком, когда я вызову эту функцию, но R не считает x списком. Как я могу написать функцию, чтобы при предоставлении списка мои выходные данные были элементами, которые я указал в функции?

m  
[[1]]
[[1]] [[1]]
[1] "g" "g" "h" "g" "g" "g" "k" "l" 

[[2]]
[[2]] [[1]]
[1] "g" "h" "k" "k" "l" "g"

Ожидаемый результат

[[1]] 5       # No. of g

[[2]] 2       # No. of g

Точно так же я хотел бы также получить числа для h, k и l. Я ставлю m как x при вызове функции.

Например: - моя функция (м)

1 Ответ

0 голосов
/ 28 июня 2018

Ваш случай несколько усложняется тем фактом, что ваш m - это не просто список векторов символов, но, в вашем примере, список из 2 списков из 1 вектора символов, который будет сгенерирован

m = list(strsplit("gghgggkl", ""), strsplit("ghkklg", ""))

Если мы хотим, чтобы myfunction работал с этой структурой данных, мы должны обратиться к компоненту списков длины-1 с помощью операции [[1]] (см. x[[1]] ниже) и, как подсказал Локи, мы можем использовать lapply для работы со всеми компонентами внешнего списка и sum с логическим выражением для получения желаемого количества:

myfunction = function(m) lapply(m, function(x) sum(x[[1]]=='g'))
myfunction(m)

результат:

[[1]]
[1] 5

[[2]]
[1] 2
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...