কিভাবে NULLs সঙ্গে একটি তালিকা প্রসারিত কিছু দৈর্ঘ্য?

Given a list whose length <= N, what is the best/most efficient way to fill it up with trailing NULLs up to length (so that it has length N).

এটি এমন একটি জিনিস যা কোনও উপযুক্ত ভাষাতে এক-মাছ ধরার যন্ত্র, তবে আমার কোন সূত্র নেই যে R এর কয়েকটি লাইনগুলিতে এটি কীভাবে (দক্ষতার সাথে) করতে হয় যাতে এটি প্রতিটি কোণার ক্ষেত্রে (শূন্য দৈর্ঘ্য তালিকা ইত্যাদি) কাজ করে। ।

3

6 উত্তর

আসুন এটা সত্যিই সহজ রাখি:

tst<-1:10 #whatever, to get a vector of length 10
tst<-tst[1:15]
7
যোগ
এটাই. এই সমাধানটি ম্যাথিউ ডাউলের ​​প্রস্তাবিত তুলনায় 2x দ্রুত এবং আমার পদ্ম সমাধানটি প্রায় 5x দ্রুত।
যোগ লেখক eold, উৎস
হ্যাঁ, এই বড় তালিকা জন্য এমনকি দ্রুত। ধন্যবাদ।
যোগ লেখক eold, উৎস
@leden। তবুও আরেকটি উপায় কেবল দৈর্ঘ্য (tst) = 15 । কোন দ্রুত? কিভাবে আপনি পরীক্ষা হয়নি?
যোগ লেখক Matt Dowle, উৎস
এই একটি তালিকা কিভাবে? :)
যোগ লেখক Roman Luštrik, উৎস
যথেষ্ট ন্যায্য। :)
যোগ লেখক Roman Luštrik, উৎস
@ রোমানলুষ্টিক: আহেম। ভাগ্যক্রমে, এটি tst <-list (1,2,3) এর জন্যও কাজ করে। কিন্তু অবশ্যই, একটি তালিকা একটি ভেক্টর একটি বিশেষ ক্ষেত্রে, তাই আমি ভেবেছিলাম আমি আরো সাধারণ সমাধান প্রদান করব। <�কাশি />
যোগ লেখক Nick Sabbe, উৎস

এটা চেষ্টা কর :

> l = list("a",1:3)
> N = 5
> l[N+1]=NULL
> l
[[1]]
[1] "a"

[[2]]
[1] 1 2 3

[[3]]
NULL

[[4]]
NULL

[[5]]
NULL

>
6
যোগ

কিভাবে এই সম্পর্কে?

> l = list("a",1:3)
> length(l)=5
> l
[[1]]
[1] "a"

[[2]]
[1] 1 2 3

[[3]]
NULL

[[4]]
NULL

[[5]]
NULL
5
যোগ

তালিকাটির দৈর্ঘ্য সরাসরি সম্পাদনা করা যত দ্রুত সম্ভব আমি বলতে পারি:

tmp <- vector("list",5000)
sol1 <- function(x){
    x <- x[1:10000] 
}
sol2 <- function(x){
    x[10001] <- NULL
}
sol3 <- function(x){
    length(x) <- 10000
}

library(rbenchmark)
benchmark(sol1(tmp),sol2(tmp),sol3(tmp),replications = 5000)
       test replications elapsed relative user.self sys.self user.child sys.child
1 sol1(tmp)         5000   2.045 1.394952     1.327    0.727          0         0
2 sol2(tmp)         5000   2.849 1.943383     1.804    1.075          0         0
3 sol3(tmp)         5000   1.466 1.000000     0.937    0.548          0         0

কিন্তু পার্থক্যগুলি বিশাল নয়, যদি না আপনি এটি অনেকগুলি দীর্ঘ তালিকাতে করে থাকেন তবে আমি মনে করি।

4
যোগ

আমি ছোট উপায় আছে নিশ্চিত, কিন্তু আমি করতে আগ্রহী হবে:

l <- as.list(1:10)
N <- 15
l <- c(l, as.list(rep(NA, N - length(l) )))
1
যোগ

হাই: আপনি যদি একটি প্রকৃত তালিকা সম্পর্কে কথা বলছেন তবে আমি নিশ্চিত নই তবে, যদি আপনি ছিলেন তবে নীচের কাজটি হবে। এটি কাজ করে কারণ, একবার আপনি একটি ভেক্টরের উপাদানটি অ্যাক্সেস করেন (যা একটি তালিকা) যা সেখানে নেই, R সেই ভেক্টরটিকে সেই দৈর্ঘ্যের মধ্যে প্রসারিত করে।

length <- 10
temp <- list("a","b")
print(temp)
temp[length] <- NULL
print(temp)
0
যোগ