স্ট্রিং / চরিত্রের একটি ভেক্টর সংযুক্ত করা


273

আমার কাছে যদি টাইপ চরিত্রের ভেক্টর থাকে তবে আমি মানগুলি স্ট্রিংয়ে কীভাবে সংযুক্ত করতে পারি? এখানে আমি এটি কীভাবে পেস্ট দিয়ে করব () :

sdata = c('a', 'b', 'c')
paste(sdata[1], sdata[2], sdata[3], sep ='')

ফলনশীল "abc"

তবে অবশ্যই, এটি কেবল তখনই কাজ করে যদি আমি সময় আগে sdata দৈর্ঘ্য জানি ।

উত্তর:


480

পেস্ট ফাংশনটির মধ্যে একটি খালি পতন যুক্তি ব্যবহার করার চেষ্টা করুন :

paste(sdata, collapse = '')

ধন্যবাদ http://twitter.com/onlinetips/status/7491806343


7
কেবলমাত্র একটি দ্রষ্টব্য যে যদি sdataদুটি স্ট্রিং থাকে যা সমস্ত একই দৈর্ঘ্যের বা পরিবর্তনশীল দৈর্ঘ্যের হয় তবে paste(sdata, sep = '', collapse = '')অপ্রত্যাশিত ফলাফল এড়াতে ব্যবহার করা উচিত।
জেলানিক্স

42

ম্যাট এর উত্তর অবশ্যই সঠিক উত্তর। যাইহোক, কমিক ত্রাণ উদ্দেশ্যে একটি বিকল্প সমাধান এখানে:

do.call(paste, c(as.list(sdata), sep = ""))

6
আপনি সত্যিই সেখানে একটি প্রয়োগ () বিবৃতি কাজ করতে পারে। যদি আপনি তা করেন তবে আমি আপনাকে ভোট দিয়ে দেব;)
জেডি লং

collapseপ্যারামিটারটি না থাকলে এটিই সবচেয়ে মার্জিত সমাধান হবে । আপনি যদি সত্যিই খুব অনুরূপ কিছু করতে চান তবে এত কৌতুক স্বস্তি নয় :)
উড়ন্ত ভেড়া

9

আপনি এই জাতীয় প্যাকেজ থেকে প্যারামিটার stri_pasteসহ ফাংশন ব্যবহার করতে পারেন :collapsestringi

stri_paste(letters, collapse='')
## [1] "abcdefghijklmnopqrstuvwxyz" 

এবং কিছু মানদণ্ড:

require(microbenchmark)
test <- stri_rand_lipsum(100)
microbenchmark(stri_paste(test, collapse=''), paste(test,collapse=''), do.call(paste, c(as.list(test), sep="")))
Unit: microseconds
                                      expr     min       lq     mean   median       uq     max neval
           stri_paste(test, collapse = "") 137.477 139.6040 155.8157 148.5810 163.5375 226.171   100
                paste(test, collapse = "") 404.139 406.4100 446.0270 432.3250 442.9825 723.793   100
do.call(paste, c(as.list(test), sep = "")) 216.937 226.0265 251.6779 237.3945 264.8935 405.989   100

2
নতুন কিছু শিখতে আমি আর.আসকে সুন্দর করে কখনও মাপকাঠির কাজ করিনি।
টোরিয়েন

6

এর জন্য sdata:

gsub(", ","",toString(sdata))

পূর্ণসংখ্যার ভেক্টরের জন্য:

gsub(", ","",toString(c(1:10)))

6
এটি একটি বিপজ্জনক উত্তর - যদি ভেক্টরের উপাদানগুলিতে কমা-স্থানের ক্রম থাকে তবে এই উত্তরটি তাদের সরিয়ে দেবে।
C8H10N4O2

5

ম্যাট টার্নারের উত্তর অবশ্যই সঠিক উত্তর। তবে কেন উইলিয়ামসের জবাবের প্রবণতায় আপনি এটিও করতে পারেন:

capture.output(cat(sdata, sep="")) 

1

এখানে একটি সামান্য ইউটিলিটি ফাংশন যা সহজেই মুদ্রণের জন্য মানগুলির একটি নামযুক্ত বা নামবিহীন তালিকাটি ভেঙে দেয় easier এটি কোড কোডটি নিজেই প্রিন্ট করবে। এটি আর পৃষ্ঠায় আমার তালিকার উদাহরণ থেকে ।

নামযুক্ত বা নামবিহীন কয়েকটি তালিকা তৈরি করুন:

# Define Lists
ls_num <- list(1,2,3)
ls_str <- list('1','2','3')
ls_num_str <- list(1,2,'3')

# Named Lists
ar_st_names <- c('e1','e2','e3')
ls_num_str_named <- ls_num_str
names(ls_num_str_named) <- ar_st_names

# Add Element to Named List
ls_num_str_named$e4 <- 'this is added'

এখানে এমন একটি ফাংশন যা নামযুক্ত বা নামবিহীন তালিকাটিকে স্ট্রিংয়ে রূপান্তর করবে:

ffi_lst2str <- function(ls_list, st_desc, bl_print=TRUE) {

  # string desc
  if(missing(st_desc)){
    st_desc <- deparse(substitute(ls_list))
  }

  # create string
  st_string_from_list = paste0(paste0(st_desc, ':'), 
                               paste(names(ls_list), ls_list, sep="=", collapse=";" ))

  if (bl_print){
    print(st_string_from_list)
  }
}

পূর্বে তৈরি তালিকাগুলির সাথে ফাংশনটি পরীক্ষা করা:

> ffi_lst2str(ls_num)
[1] "ls_num:=1;=2;=3"
> ffi_lst2str(ls_str)
[1] "ls_str:=1;=2;=3"
> ffi_lst2str(ls_num_str)
[1] "ls_num_str:=1;=2;=3"
> ffi_lst2str(ls_num_str_named)
[1] "ls_num_str_named:e1=1;e2=2;e3=3;e4=this is added"

তালিকার উপাদানগুলির উপসেট সহ ফাংশনটি পরীক্ষা করা:

> ffi_lst2str(ls_num_str_named[c('e2','e3','e4')])
[1] "ls_num_str_named[c(\"e2\", \"e3\", \"e4\")]:e2=2;e3=3;e4=this is added"
> ffi_lst2str(ls_num[2:3])
[1] "ls_num[2:3]:=2;=3"
> ffi_lst2str(ls_str[2:3])
[1] "ls_str[2:3]:=2;=3"
> ffi_lst2str(ls_num_str[2:4])
[1] "ls_num_str[2:4]:=2;=3;=NULL"
> ffi_lst2str(ls_num_str_named[c('e2','e3','e4')])
[1] "ls_num_str_named[c(\"e2\", \"e3\", \"e4\")]:e2=2;e3=3;e4=this is added"
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.