আমার একটি তালিকা আছে এবং আমি এটি থেকে একটি একক উপাদান অপসারণ করতে চাই। কিভাবে আমি এটি করতে পারব?
আমি এই ফাংশনটির সুস্পষ্ট নামগুলি রেফারেন্স ম্যানুয়ালটিতে কী হবে বলে আমি সন্ধান করার চেষ্টা করেছি এবং আমি উপযুক্ত কিছু পাই নি।
আমার একটি তালিকা আছে এবং আমি এটি থেকে একটি একক উপাদান অপসারণ করতে চাই। কিভাবে আমি এটি করতে পারব?
আমি এই ফাংশনটির সুস্পষ্ট নামগুলি রেফারেন্স ম্যানুয়ালটিতে কী হবে বলে আমি সন্ধান করার চেষ্টা করেছি এবং আমি উপযুক্ত কিছু পাই নি।
উত্তর:
আমি আর মোটেও জানি না, তবে কিছুটা সৃজনশীল গুগল আমাকে এখানে নিয়ে গেছে: http://tolstoy.newcastle.edu.au/R/help/05/04/1919.html
সেখান থেকে মূল উক্তি:
আমি তালিকা থেকে উপাদানগুলি কীভাবে সরিয়ে ফেলতে পারি তার জন্য আমি স্পষ্ট করে ডকুমেন্টেশন পাই না, তবে বিচার এবং ত্রুটি আমাকে বলে tells
মাইলিস্ট [[5]] <- নুল
5 তম উপাদানটি সরিয়ে ফেলবে এবং তারপরে সেই উপাদানটি মোছার ফলে সৃষ্ট গর্তটি "বন্ধ" করবে। এটি সূচকের মানগুলিকে ভোগ করে, সুতরাং উপাদানগুলি হ্রাস করার ক্ষেত্রে আমাকে সতর্কতা অবলম্বন করতে হবে। আমার অবশ্যই তালিকার পিছন থেকে সামনের দিকে কাজ করা উচিত।
থ্রেডে পরবর্তী পোস্টে একটি প্রতিক্রিয়া জানিয়েছে:
তালিকার কোনও উপাদান মোছার জন্য, আর এফএকিউ 7.1 দেখুন
এবং আর এফএকিউ এর সম্পর্কিত বিভাগটি বলে:
... x [i] বা x [[i]] কে NUL তে সেট করবেন না কারণ এটি তালিকা থেকে সংশ্লিষ্ট উপাদানটিকে সরিয়ে ফেলবে।
যা আপনাকে কিছুটা (কিছুটা পিছনের দিকে) বলবে বলে মনে হচ্ছে কীভাবে কোনও উপাদান অপসারণ করা যায়।
আশা করি যা সহায়তা করে বা কমপক্ষে আপনাকে সঠিক দিকে নিয়ে যায়।
Error in list[length(list)] <- NULL : replacement has length zero
আপনি যদি স্থানটি তালিকায় স্থান পরিবর্তন করতে না চান (যেমন কোনও ফাংশনে সরানো কোনও উপাদান দিয়ে তালিকাটি পাস করার জন্য), আপনি ইনডেক্সিং ব্যবহার করতে পারেন: নেতিবাচক সূচকগুলির অর্থ "এই উপাদানটি অন্তর্ভুক্ত করবেন না"।
x <- list("a", "b", "c", "d", "e"); # example list
x[-2]; # without 2nd element
x[-c(2, 3)]; # without 2nd and 3rd
এছাড়াও, লজিকাল ইনডেক্স ভেক্টরগুলি দরকারী:
x[x != "b"]; # without elements that are "b"
এটি ডেটাফ্রেমেও কাজ করে:
df <- data.frame(number = 1:5, name = letters[1:5])
df[df$name != "b", ]; # rows without "b"
df[df$number %% 2 == 1, ] # rows with odd numbers only
x$b
বা তালিকার উপাদান থেকে আপনি "b" কে সরাতে পারবেন না x[[2]] = c("b","k")
।
%in%
একাধিক আইটেমের বিরুদ্ধে পরীক্ষার জন্য ব্যবহার করতে পারেন । আমি নিশ্চিত না যে আপনি "এক্স-বি মুছে ফেলতে পারবেন না" বলতে যা বোঝায় - আপনি কি পুরো কলামটি অপসারণ করতে চান b
?
এখানে একটি তালিকার শেষ উপাদানটি কীভাবে সরানো হবে তা এখানে :
x <- list("a", "b", "c", "d", "e")
x[length(x)] <- NULL
যদি এক্স ভেক্টর হতে পারে তবে আপনাকে একটি নতুন অবজেক্ট তৈরি করতে হবে:
x <- c("a", "b", "c", "d", "e")
x <- x[-length(x)]
একক লাইনের একটি তালিকা থেকে নাল উপাদানগুলি সরানো:
x=x[-(which(sapply(x,is.null),arr.ind=TRUE))]
চিয়ার্স
x
খালি তালিকায় গেলে ব্রেক হয়। পরিবর্তে এই কাজের জন্য compact
থেকে plyr
ব্যবহার করুন ।
-(which(sapply(x,is.null),arr.ind=TRUE))
রিটার্নগুলি named integer(0)
যা পুরো সারিটি ফেলে দেবে।
আমি এটি যুক্ত করতে চাই যদি এটি একটি নামযুক্ত তালিকা হয় তবে আপনি কেবল ব্যবহার করতে পারেন within
।
l <- list(a = 1, b = 2)
> within(l, rm(a))
$b
[1] 2
সুতরাং আপনি মূল তালিকাটি ওভাররাইট করতে পারেন
l <- within(l, rm(a))
a
তালিকা থেকে নামকরণ উপাদান অপসারণ l
।
within(l, rm(a, b))
আপনার যদি একটি নামযুক্ত তালিকা থাকে এবং একটি নির্দিষ্ট উপাদান মুছতে চান তবে আপনি চেষ্টা করতে পারেন:
lst <- list(a = 1:4, b = 4:8, c = 8:10)
if("b" %in% names(lst)) lst <- lst[ - which(names(lst) == "b")]
এই তালিকা করতে হবে lst
উপাদানের সঙ্গে a
, b
, c
। দ্বিতীয় লাইনটি b
এটি উপস্থিত রয়েছে কিনা যাচাই করার পরে উপাদানটিকে সরিয়ে দেয় (@jjv উল্লিখিত সমস্যা এড়াতে)।
বা আরও ভাল:
lst$b <- NULL
এইভাবে কোনও অস্তিত্বের উপাদান (উদাঃ lst$g <- NULL
) মুছে ফেলার চেষ্টা করা কোনও সমস্যা নয়
বিভিন্ন ধরণের তালিকার ক্রিয়াকলাপ মোকাবেলার জন্য তালিকাভুক্ত প্যাকেজ রয়েছে ( http://cran.r-project.org/web/packages/rlist/index.html )।
উদাহরণ ( http://cran.r-project.org/web/packages/rlist/vignettes/Filtering.html ):
library(rlist)
devs <-
list(
p1=list(name="Ken",age=24,
interest=c("reading","music","movies"),
lang=list(r=2,csharp=4,python=3)),
p2=list(name="James",age=25,
interest=c("sports","music"),
lang=list(r=3,java=2,cpp=5)),
p3=list(name="Penny",age=24,
interest=c("movies","reading"),
lang=list(r=1,cpp=4,python=2)))
list.remove(devs, c("p1","p2"))
ফলাফল স্বরূপ:
# $p3
# $p3$name
# [1] "Penny"
#
# $p3$age
# [1] 24
#
# $p3$interest
# [1] "movies" "reading"
#
# $p3$lang
# $p3$lang$r
# [1] 1
#
# $p3$lang$cpp
# [1] 4
#
# $p3$lang$python
# [1] 2
আপনার এখনও এর জবাব দরকার কিনা তা জানেন না তবে আমি আমার সীমিত (3 সপ্তাহের স্ব-শিক্ষাদানের মূল্য) এর অভিজ্ঞতা পেয়েছি যে, NULL
অ্যাসাইনমেন্টটি ব্যবহার করা আসলে ভুল বা উপ-অনুকূল, বিশেষত যদি আপনি গতিশীলভাবে আপডেট করছেন ফর-লুপের মতো কিছুতে একটি তালিকা।
আরও সুনির্দিষ্ট হতে, ব্যবহার করে
myList[[5]] <- NULL
ত্রুটি নিক্ষেপ করবে
মাইলিস্ট [[৫]] <- নুল: প্রতিস্থাপনের দৈর্ঘ্য শূন্য
অথবা
প্রতিস্থাপনের চেয়ে সরবরাহিত আরও উপাদান
আমি আরও ধারাবাহিকভাবে কাজ করতে যা পেয়েছি তা হ'ল
myList <- myList[[-5]]
[[-5]]
একক বর্গাকার বন্ধনী হওয়া উচিত, অন্যথায় আপনি কেবলমাত্র তালিকার উপাদানটির বিষয়বস্তুগুলি অনির্বাচিত করছেন, উপাদানটি নিজেই নয়। ভাল, কমপক্ষে ডাবল স্কোয়ার বন্ধনী ব্যবহার করা আমাকে এই ত্রুটি দেয়: "একাধিক উপাদান নির্বাচন করার চেষ্টা"। আমার জন্য কি কাজ তারপর ছিল: myList <- myList[-5]
।
কেবলমাত্র দ্রুত যুক্ত করতে চেয়েছিলেন (কারণ আমি এটি কোনও উত্তরের মধ্যে দেখতে পাইনি), একটি নামের তালিকার জন্য আপনিও এটি করতে পারেন l["name"] <- NULL
। উদাহরণ স্বরূপ:
l <- list(a = 1, b = 2, cc = 3)
l['b'] <- NULL
-
উপাদানের অবস্থানের সাথে (নেতিবাচক চিহ্ন) ব্যবহার করুন , উদাহরণস্বরূপ, যদি তৃতীয় উপাদানটি অপসারণ করা হয় তবে এটি ব্যবহার করুনyour_list[-3]
ইনপুট
my_list <- list(a = 3, b = 3, c = 4, d = "Hello", e = NA)
my_list
# $`a`
# [1] 3
# $b
# [1] 3
# $c
# [1] 4
# $d
# [1] "Hello"
# $e
# [1] NA
তালিকা থেকে একক উপাদান সরান
my_list[-3]
# $`a`
# [1] 3
# $b
# [1] 3
# $d
# [1] "Hello"
# $e
[1] NA
তালিকা থেকে একাধিক উপাদান সরান
my_list[c(-1,-3,-2)]
# $`d`
# [1] "Hello"
# $e
# [1] NA
my_list[c(-3:-5)]
# $`a`
# [1] 3
# $b
# [1] 3
my_list[-seq(1:2)]
# $`c`
# [1] 4
# $d
# [1] "Hello"
# $e
# [1] NA
নামযুক্ত তালিকার ক্ষেত্রে আমি সেই সাহায্যকারী ফাংশনগুলি দরকারী বলে মনে করি
member <- function(list,names){
## return the elements of the list with the input names
member..names <- names(list)
index <- which(member..names %in% names)
list[index]
}
exclude <- function(list,names){
## return the elements of the list not belonging to names
member..names <- names(list)
index <- which(!(member..names %in% names))
list[index]
}
aa <- structure(list(a = 1:10, b = 4:5, fruits = c("apple", "orange"
)), .Names = c("a", "b", "fruits"))
> aa
## $a
## [1] 1 2 3 4 5 6 7 8 9 10
## $b
## [1] 4 5
## $fruits
## [1] "apple" "orange"
> member(aa,"fruits")
## $fruits
## [1] "apple" "orange"
> exclude(aa,"fruits")
## $a
## [1] 1 2 3 4 5 6 7 8 9 10
## $b
## [1] 4 5
এ কেমন? আবার সূচকগুলি ব্যবহার করে
> m <- c(1:5)
> m
[1] 1 2 3 4 5
> m[1:length(m)-1]
[1] 1 2 3 4
অথবা
> m[-(length(m))]
[1] 1 2 3 4
m[1:(length(m) - 1)]
আপনি যদি সংখ্যার সূচকগুলি এড়াতে চান তবে আপনি এটি ব্যবহার করতে পারেন
a <- setdiff(names(a),c("name1", ..., "namen"))
namea...namen
একটি থেকে নাম মুছতে । এটি তালিকার জন্য কাজ করে
> l <- list(a=1,b=2)
> l[setdiff(names(l),"a")]
$b
[1] 2
পাশাপাশি ভেক্টরদের জন্যও
> v <- c(a=1,b=2)
> v[setdiff(names(v),"a")]
b
2