2016-06-02 2 views
-2

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

Это то, что я до сих пор:

У меня есть переменные с именами, упомянутыми в векторе символьного fileNames.

Что мне нужно знать:

  1. Как передать каждую строку из вектора fileNames функционировать writeToHDFS, так как я хотел бы эта функция должна быть выполнена для каждого элемента в векторе.

  2. Как использовать имя строки для доступа к переменным этого имени в функции. Например:

На этой линии, у меня есть доступ к переменному с именем таким же, как строки, переданной fileName переменными в функции.

hdfs.write(variableWithData, modelfile) 

3. Могу ли я передать переменную fileName в

modelfile <- hdfs.file(fileName, "w") 

вместо того, чтобы передать строку для имени файла?

+1

Я очень поражен тем, как сообщество R на стеке переполняет голоса почти всем. –

+0

Прочтите документацию '? Lapply', посмотрите пример' example (lapply) '(оба являются внешними ресурсами для SO). Прочтите отличный http://stackoverflow.com/questions/3505701/r-grouping-functions-sapply-vs-lapply-vs-apply-vs-tapply-vs-by-vs-aggrega, чтобы получить представление о том, как lapply/sapply работает. Для получения объекта из charater посмотрите на 'get()' – jogo

+1

'a <-" BOD "; x <- get (a); x' – jogo

ответ

1

I am trying to use lapply so that I can apply a custom function on all elements of a vector in R

В этой ситуации, вы должны использовать tapply:

tapply(fileNames, 1:length(fileNames), writeToHDFS) 

lapply, является аббревиатурой «список применить», но fileNames является вектор не список.

Люди проголосовали за вас, потому что настоятельно рекомендуется сначала проверить руководство или документацию. Поскольку вы уже довольно хорошо нацелены на использование lapply, вы можете узнать от ?lapply.

Голосов нет, это еще одна форма обратной связи, кроме комментариев и ответов. Это означает, что этот вопрос не нуждается в усилиях сообщества SO. Как пользователь R, вы должны знать, что R-документация - это первое, что вы должны искать, когда попадаете в неприятности.

+1

'lapply()' можно применить к вектору: 'lapply (1: 5, sqrt)' – jogo

1

writeToHDFS (x) дает возвращаемое значение функции. Но вы хотите передать функцию так:

lapply(fileNames,writeToHDFS) 
+0

Но это вызывает ошибку: lapply (fileNames, writeToHDFS (x)) Ошибка в печати (имя_файла): объект 'x' не найден –

+0

@SimranKaur, что неверно. – doker

+0

resolved ....... Спасибо –