ফ্লাইতে ভেরিয়েবলের নাম কীভাবে রাখবেন?


99

উড়তে নতুন পরিবর্তনশীল নাম তৈরি করা সম্ভব?

আমি তালিকা থেকে ডেটা ফ্রেমগুলি শেষের সংখ্যার সাথে নতুন ভেরিয়েবলগুলিতে পড়তে চাই। Orca1, orca2, orca3 এর মতো কিছু ...

আমি যদি এরকম কিছু চেষ্টা করি

paste("orca",i,sep="")=list_name[[i]]

আমি এই ত্রুটি পেয়েছি

target of assignment expands to non-language object

এর আশেপাশে আর কোন উপায় আছে?


10
যতক্ষণ আমরা আর-ফ্যাক্স ট্যাগ দিচ্ছি ততক্ষণ লিঙ্কটি দেওয়া যাক (এফএকিউ 7.21: cran.r-project.org/doc/FAQ/… )
বেন বলকার

উত্তর:


121

ব্যবহার assign:

assign(paste("orca", i, sep = ""), list_name[[i]])

28
এটি এইভাবে করতে হয়। এখানে একটি মেটা-প্রশ্ন রয়েছে যা "আমার এই করা উচিত?" উত্তর প্রায় সবসময় "না"। একটি তালিকার নামযুক্ত উপাদান প্রায় সর্বদা পছন্দ করা হয়।
এরি বি ফ্রেডম্যান

26
উত্তরটি যখন না থাকে তবে প্রায় সর্বদা "না" থাকে।
শেন

9
ভালো অবশ্যই. তবে এই উত্তরটির সন্ধানকারী বেশিরভাগ লোক তাদের আবেদনের জন্য একটি তালিকা প্রত্যাখ্যান করার অবস্থান থেকে এটি করছেন না।
এরি বি ফ্রেডম্যান

@ অ্যারি বি ফ্রেডম্যান আমি মাইপ্যাকেজ / ডেটাতে সংরক্ষণ করি এমন ডেটাসেটের জন্য পরিবর্তনশীল নামগুলি তৈরি করি। ফাইলের জন্য একই নাম এবং এটিতে থাকা ডেটার (প্রতিটি প্যাকেজে থাকা ডেটার জন্য প্রস্তাবিত প্রস্তাব দেওয়া) সমেত তার ফাইলের প্রতিটি। প্রতিটি ডেটাসেট প্রায় 10M এবং মোট 17 ডলার হয় আমি খুব কমই অন্যভাবে দেখতে পারি।
cmbarbu

4
আপনি ব্যবহার না করার কোনও কারণ আছে paste0?
ব্রোভিক

33

এটা আমার কাছে যে আপনার বদলে একটি তালিকা সঙ্গে ভালো ব্যবহার হতে পারে বলে মনে হয় orca1, orca2ইত্যাদি ... তারপর এটি হবে orca[1], orca[2]...

সাধারণত আপনি একটি সংখ্যা ছাড়া অন্য কিছু দ্বারা পৃথক হয়ে চলকগুলির একটি তালিকা তৈরি করছেন কারণ সেই সংখ্যাটি পরে তাদের অ্যাক্সেস করার সুবিধাজনক উপায় হবে।

orca <- list()
orca[1] <- "Hi"
orca[2] <- 59

অন্যথায়, assignআপনি চান ঠিক তাই।


11
আমি রাজী. সাধারণত যখন লোকেরা মনে করে যে তারা ফ্লাইতে ভেরিয়েবলের নাম রাখতে চান, তখন তারা কী চান তা একটি ভিন্ন ডেটা কাঠামো।
মাইকেল ডান

9
+1 (FAQ 7.21: cran.r-project.org/doc/FAQ/… ) এটিকে সুন্দরভাবে আলোচনা করেছে
বেন বলকার

11

ডেটা ফ্রেম তৈরি করবেন না। তালিকাটি রাখুন, এর উপাদানগুলির নাম দিন তবে এটি সংযুক্ত করবেন না।

এর সবচেয়ে বড় কারণ হ'ল আপনি যদি চলতে চলতে পারেন তবে প্রায় সর্বদা আপনাকে কার্যকর কিছু করার জন্য তাদের প্রত্যেকের মধ্য দিয়ে পুনরাবৃত্তি করতে হবে। সেখানে আপনাকে আবারও উড়ে যাওয়ার জন্য তৈরি করা প্রতিটি নাম দিয়ে পুনরাবৃত্তি করতে বাধ্য করা হবে।

তালিকার উপাদানগুলির নাম এবং নামগুলির মাধ্যমে পুনরাবৃত্তি করা আরও সহজ।

যতদূর সংযুক্তি সম্পর্কিত, এটি আর এর মধ্যে সত্যিই খারাপ প্রোগ্রামিং অনুশীলন এবং আপনি যদি সতর্ক না হন তবে প্রচুর সমস্যার কারণ হতে পারে।


সুতরাং, একটি সংযুক্তি করবেন, তবে কেবল তালিকার মাধ্যমে পুনরাবৃত্তিটি সম্পন্ন করার পরে?
মক্স 21

4

FAQ বলছে:

যদি তোমার থাকে

varname <- c("a", "b", "d")

আপনি করতে পারেন

get(varname[1]) + 2

জন্য

a + 2

বা

assign(varname[1], 2 + 2)

জন্য

a <- 2 + 2

সুতরাং দেখে মনে হচ্ছে আপনি যখন কোনও ভেরিয়েবল ব্যবহার করে এমন সূত্রটি মূল্যায়ন করতে চান (যেমন একটি কনকেনেট), এবং আপনি যখন প্রাক-ঘোষিত ভেরিয়েবলের কোনও মান নির্ধারণ করতে চান তখন আপনি জিইটি ব্যবহার করেন।

নিয়োগের জন্য সিনট্যাক্স: বরাদ্দ করুন (এক্স, মান)

x: একটি পরিবর্তনশীল নাম, একটি অক্ষর স্ট্রিং হিসাবে দেওয়া। কোনও জবরদস্তি করা হয় না, এবং একের চেয়ে বড় দৈর্ঘ্যের একটি চরিত্রের ভেক্টরের প্রথম উপাদানটি সতর্কতা সহ ব্যবহার করা হবে।

মান: এক্সকে নির্ধারিত মান।


0

আর একটি জটিল সমাধান হ'ল তালিকার উপাদানগুলির নামকরণ এবং attachএটি:

list_name = list(
    head(iris),
    head(swiss),
    head(airquality)
    )

names(list_name) <- paste("orca", seq_along(list_name), sep="")
attach(list_name)

orca1
#   Sepal.Length Sepal.Width Petal.Length Petal.Width Species
# 1          5.1         3.5          1.4         0.2  setosa
# 2          4.9         3.0          1.4         0.2  setosa
# 3          4.7         3.2          1.3         0.2  setosa
# 4          4.6         3.1          1.5         0.2  setosa
# 5          5.0         3.6          1.4         0.2  setosa
# 6          5.4         3.9          1.7         0.4  setosa

14
কৌতুকময়, তবে বুদ্ধিমান নয়। যদি উত্তরটি হয় attachআপনি সাধারণত ভুল প্রশ্ন জিজ্ঞাসা করেন ...
বেন বলকার

-1

এবং এই বিকল্প?

list_name<-list()
for(i in 1:100){
    paste("orca",i,sep="")->list_name[[i]]
}

এটি পুরোপুরি কাজ করে। উদাহরণস্বরূপ, আপনি লিখেছেন, প্রথম লাইনটি অনুপস্থিত এবং তারপরে আপনাকে ত্রুটি বার্তা দেয়।


4
এটি ওপির প্রশ্নের সমাধান করে না। আমাদের কাছে ডেটাফ্রেমগুলির সাথে একটি তালিকা রয়েছে এবং আমরা এটি ডেটাফ্রেমে অর্কে1, অরকা 2, ইত্যাদি হিসাবে অর্পণ করতে চাই
zx8754

"ডেটাফ্রেমগুলির সাথে তালিকা" = "ডেটাফ্রেমের তালিকা"?
মোক্স
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.