লুপের জন্য ভেরিয়েবলের নামের তালিকা তৈরি করুন, তারপরে তাদের মান নির্ধারণ করুন


27

আমি অবাক হয়েছি যদি লুপের জন্য একটি ব্যবহার করে ভেরিয়েবলের তালিকা তৈরি করার কোনও সহজ উপায় থাকে এবং এর মান দেয়।

for(i in 1:3)
{
  noquote(paste("a",i,sep=""))=i
}

উপরের কোড, আমি তৈরি করার চেষ্টা a1, a2, a3, 1, 2, 3 তবে আর একটি ত্রুটির বার্তা দেয় যার মান ধার্য করুন। আপনার সাহায্যের জন্য ধন্যবাদ.


3
আপনার সন্দেহ আছে আপনাকে করতে হবে - আমি মনে করি আপনি খুব ভুল উপায়ে কিছু তৈরি করছেন making

@mbq মধ্যে Eviews উদাহরণস্বরূপ এটা বেশ স্বাভাবিক অনুশীলন কোডিং হয়। আমি এটির পক্ষে কথা বলছি না, আমার শীর্ষস্থানীয় অশুভ সফ্টওয়্যার তালিকায় এক্সভিউগুলি রেট এক্সেলের তুলনায় কিছুটা কম রয়েছে :)
এমপিটকাস

6
@ এমপিক্টাস আর-তে, একটি তালিকা তৈরি করা, তার namesপরামিতিটি সেট করা এবং পরে হয় কেবল এটি ব্যবহার করুন, attachএটি এটিকে বা এর সাথে list2envএবং এর সাথে একটি পরিবেশে রূপান্তর করা আরও স্বাভাবিক eval। কোনও লুপ, পার্স বা অন্যান্য কুরুচিপূর্ণ স্টাফ ছাড়াই।

@ এমবিকিউ, এইচএম, list2envএকটি তুলনামূলকভাবে নতুন ফাংশন। এবং এখনও এটি কিছু পরিবেশে চলক তৈরি করবে, যখন ওপি শীর্ষ পরিবেশে ভেরিয়েবলগুলি পেতে চায়। কদর্যতা এখনও রয়ে গেছে :)
এমপিক্টাস

2
ভবিষ্যতের অনুরূপ প্রকৃতির প্রশ্নের জন্য, আমি পরামর্শ দিই যে এই ধরণের প্রশ্ন আসলে স্ট্যাকওভারফ্লোতে অন্তর্ভুক্ত। প্রশ্নের প্রতি পরিসংখ্যানের সাথে কোনও সম্পর্ক নেই।
মঙ্গলবার

উত্তর:


41

আপনার জন্য খুঁজছেন assign()

for(i in 1:3){
  assign(paste("a", i, sep = ""), i)    
}

দেয়

> ls()
[1] "a1"          "a2"          "a3" 

এবং

> a1
[1] 1
> a2
[1] 2
> a3
[1] 3

হালনাগাদ

আমি সম্মত হই যে লুপগুলি ব্যবহার করা (খুব প্রায়ই) খারাপ আর কোডিং শৈলী (উপরে আলোচনা দেখুন)। ব্যবহার list2env()(এটা উল্লেখ জন্য @mbq ধন্যবাদ) এই @Han লিন Shang থেকে প্রশ্ন আরেকটি সমাধান:

x <- as.list(rnorm(10000))
names(x) <- paste("a", 1:length(x), sep = "")
list2env(x , envir = .GlobalEnv)

21

মানগুলি যদি ভেক্টরে থাকে তবে লুপটি প্রয়োজনীয় নয়:

vals <- rnorm(3)
n    <- length(vals)
lhs  <- paste("a",    1:n,     sep="")
rhs  <- paste("vals[",1:n,"]", sep="")
eq   <- paste(paste(lhs, rhs, sep="<-"), collapse=";")
eval(parse(text=eq))

পার্শ্ব নোট হিসাবে, এই কারণেই আমি আর।


4
library(fortunes) fortune(106)
রোমান Luštrik

@ রোমান, আজব, আমি parseআরআর পৃষ্ঠাগুলি পড়ার পরে ব্যবহার শুরু করেছি । আমি সম্মত হই যে কখনও কখনও এটি ওভারকিল হয়, উদাহরণস্বরূপ formulaপরিচালনার ক্ষেত্রে, তবে আমি এটি খুব দরকারী বলে মনে করি। নোট করুন যে আমি ভাগ্য হিসাবে প্রস্তাবিত প্রশ্নটি পুনর্বিবেচনা করতে পারি না, যেহেতু আমি এটি জিজ্ঞাসা করি নি।
এমপিক্টাস

1
@ এমপিক্টাস: এটিকে এই বিষয়টির সাথে করতে হবে যে কোনও ফাংশনের মধ্যে ব্যবহারের সময় অন্তর্নিহিত স্কোপিং বিধিগুলি অনাকাঙ্ক্ষিত ফলাফল পেতে পারে। এছাড়াও (সহায়তা ফাইলগুলিতে উল্লিখিত হিসাবে), স্ক ও বিধি বিধানের পার্থক্যের কারণে আর ও এস পৃথক ফলাফল দিতে পারে। এটি অন্যান্য সমাধানগুলির চেয়ে ধীর। আপনার যখন এটি বহুবার করতে হবে তখন এটি আপনার পক্ষে গুরুত্বপূর্ণ। এবং সর্বশেষে তবে অন্তত নয়, বেশিরভাগ ক্ষেত্রেই ইভাল (পার্স (পার্স) ব্যবহার করার চেয়ে আরও মার্জিত এবং সহজ সমাধান রয়েছে। এই ক্ষেত্রে এটি তালিকাগুলি সহ কাজ করে বা নির্ধারিত ব্যবহার করে।
জোরিস মেয়েস

1
@ এমপিক্টাস: আমি কখনও বলিনি যে এর ঘাটতি রয়েছে। আমি কেবলমাত্র আপনাকে কেবল কারণটি দিয়েছি কেন সাধারণভাবে একটি কোর (পার্স ()) নির্মাণের বিরুদ্ধে আর কোর ডেভেলপমেন্ট দলের সদস্য টমাস লুমলে পরামর্শ দেন। (সিএফআর @ রোমান লাস্ট্রিকের উল্লেখ)
জোরিস মাই

1
ঠিক যেমন, একাধিক একক উপাদান ভেরিয়েবলগুলি তৈরি করার জন্য অ্যাসাইন ব্যবহার করার মতো খারাপ অনুশীলনকে নিরুৎসাহিত করা উচিত
এমডসুমনার
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.