0

I want to change the name of the output of my R function to reflect different strings that are inputted. Here is what I have tried:

kd = c("a","b","d","e","b")

test = function(kd){

  return(list(assign(paste(kd,"burst",sep="_"),1:6)))

}

This is just a simple test function. I get the warning (which is just as bad an error for me):

Warning message:
In assign(paste(kd, "burst", sep = "_"), 1:6) :
  only the first element is used as variable name

Ideally I would get ouput like a_burst = 1, b_burst = 2 and so on but am not getting close.

I would like split up a dataframe by contents of a vector and be able to name everything according to the name from that vector, similar to

How to split a data frame by rows, and then process the blocks?

but not quite. The naming is imperative.

Community
  • 1
  • 1
user1807096
  • 25
  • 1
  • 2
  • 7

2 Answers2

3

Something like this, maybe?

kd = c("a","b","d","e","b")

test <- function(x){
    l <- as.list(1:5)
    names(l) <- paste(x,"burst",sep = "_")
    l
}

test(kd)
joran
  • 169,992
  • 32
  • 429
  • 468
2

You could use a vector instead of a list by way of setNames:

t1_6 <- setNames( 1:6, kd)
t1_6
   a    b    d    e    b <NA> 
   1    2    3    4    5    6 

> t1_6["a"]
a 
1 

Looking at the question again I wondered if you wnated to assign sequential names to a character vector:

> a1_5 <- setNames(kd, paste0("alpha", 1:5))
> a1_5
alpha1 alpha2 alpha3 alpha4 alpha5 
   "a"    "b"    "d"    "e"    "b" 
IRTFM
  • 258,963
  • 21
  • 364
  • 487