2015-08-10 3 views
2

У меня есть функция, которая принимает один аргумент и печатает строку:R функция обработки вектора

test <- function(year){ 
    print(paste('and year in (', year,')')) 
} 

вход I вектор с одним элементом год (2012 год) он будет печатать это:

"and year in (2012)" 

Как написать функцию, поэтому, если я поставлю тест (c (2012,2013,2014)), он печатает это?

"and year in (2012,2013,2014)" 

ответ

8

Вы можете попробовать использовать ellipsis для выполнения этой задачи, и завернуть его в toString, так как он может принимать неограниченное количество значений и действует на все сразу.

test <- function(...){ 
    print(paste('and year in (', toString(c(...)),')')) 
} 

test(2012:2014) 
## [1] "and year in (2012, 2013, 2014)" 

Преимущество этого подхода заключается в том, что он также будет работать для входа, такие как

test(2012, 2013, 2014) 
## [1] "and year in (2012, 2013, 2014)" 
4

Я считаю, что этот ответ проще, чем тот, по David Arenburg. Вот несколько другое решение, отличное от David Arenburg. Вы можете включить другую пасту в функцию, используя опцию collapse. Например:

test <- function(year){ 
    years = paste(year, collapse = ",") 

    print(paste('and year in (', years,')')) 
} 

результаты:

test(1) 
# "and year in (1)" 

test(c(1, 2, 3)) 
# "and year in (1,2,3)" 
+0

Но с 'paste' вы можете указать, какой символ используется для сворачивания векторных элементов. Например, запрошенный формат не содержит пробелов между элементами. Я знаю, что это тонкое и, возможно, неуместное в этом случае ... – hugo

+0

@RichardScriven да, вы правы, я соответствующим образом перефразировал свой ответ. – hugo

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