সম্পাদনা: হ্যাডলি উইকহাম উল্লেখ করেছেন যে আমি ভুল বানান। আর সিএমডি চেক সতর্কতা নয়, নোট নিক্ষেপ করছে। আমি বিভ্রান্তির জন্য ভীষণ দুঃখিত। এটা আমার তদারকি ছিল।
সংক্ষিপ্ত সংস্করণ
R CMD check
আমি যখনই ggplot2- তে বুদ্ধিমান প্লট-তৈরি বাক্য গঠন ব্যবহার করি তখন এই নোটটি ছুঁড়ে দেয় :
no visible binding for global variable [variable name]
আমি বুঝতে পেরেছি কেন আর সিএমডি চেক এটি করে, তবে মনে হয় এটি অন্যথায় বুদ্ধিমান সিনট্যাক্সের পুরো শিরাটিকে অপরাধী করে তুলেছে। আমি নিশ্চিত নই যে আমার প্যাকেজটি পাস R CMD check
এবং সিআরএএন-এ ভর্তি হওয়ার জন্য কী পদক্ষেপ নিতে হবে ।
পটভূমি
সাসচা এপসক্যাম্প আগে একই সমস্যাটিতে পোস্ট করেছিল । আমি মনে করি পার্থক্যটি হ'ল subset()
এর ম্যানপেজটি বলেছে এটি ইন্টারেক্টিভ ব্যবহারের জন্য ডিজাইন করা হয়েছে ।
আমার ক্ষেত্রে, সমস্যাটি শেষ হয়নি, subset()
তবে এর মূল বৈশিষ্ট্যটির সাথে ggplot2
: data =
আর্গুমেন্ট।
আমি কোডের একটি উদাহরণ লিখি যা এই নোটগুলি উত্পন্ন করে
এখানে একটি উপ-ফাংশন মধ্যে আমার প্যাকেজ যে একটি চক্রান্ত পয়েন্ট যোগ করেছেন:
JitteredResponsesByContrast <- function (data) {
return(
geom_point(
aes(
x = x.values,
y = y.values
),
data = data,
position = position_jitter(height = 0, width = GetDegreeOfJitter(jj))
)
)
}
R CMD check
, এই কোডটি বিশ্লেষণ করার সময়, বলবে
granovagg.contr : JitteredResponsesByContrast: no visible binding for
global variable 'x.values'
granovagg.contr : JitteredResponsesByContrast: no visible binding for
global variable 'y.values'
আর সিএমডি চেক কেন ঠিক আছে
চেকটি প্রযুক্তিগতভাবে সঠিক। x.values
এবংy.values
- ফাংশন স্থানীয়ভাবে সংজ্ঞায়িত করা হয় না
JitteredResponsesByContrast()
- ফর্মটিতে
x.values <- [something]
বিশ্বব্যাপী বা কলারের মধ্যে প্রাক-সংজ্ঞায়িত নয় ।
পরিবর্তে, তারা এমন ডেটাফ্রেমের মধ্যে ভেরিয়েবল যা আগে সংজ্ঞায়িত হয়ে ফাংশনে প্রবেশ করে JitteredResponsesByContrast()
।
Ggplot2 কেন আর সিএমডি চেককে সন্তুষ্ট করা কঠিন করে তুলেছে
ggplot2 মনে হয় একটি data
যুক্তির ব্যবহারকে উত্সাহিত করবে । তথ্য যুক্তি, সম্ভবতঃ এই কোডটি কার্যকর করা হবে
library(ggplot2)
p <- ggplot(aes(x = hwy, y = cty), data = mpg)
p + geom_point()
তবে এই কোডটি একটি অবজেক্ট-না-পাওয়া ত্রুটি তৈরি করবে:
library(ggplot2)
hwy # a variable in the mpg dataset
দুটি কাজের চারপাশ, এবং কেন আমি উভয়ই খুশি নই
NULLing কৌশল
ম্যাথু ডাওল প্রথমে NUL এ সমস্যাযুক্ত ভেরিয়েবলগুলি সেট করার পরামর্শ দিচ্ছেন , যা আমার ক্ষেত্রে এটির মতো দেখাবে:
JitteredResponsesByContrast <- function (data) {
x.values <- y.values <- NULL # Setting the variables to NULL first
return(
geom_point(
aes(
x = x.values,
y = y.values
),
data = data,
position = position_jitter(height = 0, width = GetDegreeOfJitter(jj))
)
)
}
আমি এই সমাধানটির প্রশংসা করি, তবে তিনটি কারণে এটি অপছন্দ করি।
- এটি সন্তুষ্ট করার বাইরে কোনও অতিরিক্ত উদ্দেশ্য কাজ করে না
R CMD check
। - এটি অভিপ্রায় প্রতিফলিত করে না। এটি প্রত্যাশা বাড়িয়ে তুলেছে যে
aes()
কলটি আমাদের এখনকার নূলে চলকগুলি দেখতে পাবে (এটি হবে না), আসল উদ্দেশ্যটিকে অস্পষ্ট করার সময় (আর সিএমডি চেকগুলি ভেরিয়েবল সম্পর্কে সচেতন করে তুলবে যা অন্যথায় জানতে পারে না যে এটি আবদ্ধ ছিল) - 1 এবং 2 এর সমস্যাগুলি গুণিত হয় কারণ প্রতিবার যখন আপনি কোনও ফাংশন লিখেন যা কোনও প্লটের উপাদান দেয়, আপনাকে একটি বিভ্রান্তিকর NULLing বিবৃতি যুক্ত করতে হবে
() কৌশল সহ
আপনি with()
স্পষ্টভাবে সিগন্যাল করতে ব্যবহার করতে পারেন যে প্রশ্নে ভেরিয়েবলগুলি আরও কিছু বৃহত পরিবেশের মধ্যে পাওয়া যায়। আমার ক্ষেত্রে, with()
ব্যবহারটি এর মতো দেখাচ্ছে:
JitteredResponsesByContrast <- function (data) {
with(data, {
geom_point(
aes(
x = x.values,
y = y.values
),
data = data,
position = position_jitter(height = 0, width = GetDegreeOfJitter(jj))
)
}
)
}
এই সমাধান কাজ করে। তবে, আমি এই সমাধানটি পছন্দ করি না কারণ এটি এমনভাবে কাজ করে না যা আমি আশা করি। যদি with()
ভেরিয়েবলগুলি যেখানে দোভাষীকে নির্দেশ করার সমস্যাটি যদি সত্যিই সমাধান করা হয় তবে আমার পক্ষে যুক্তিও লাগবে না data =
। তবে, with()
সেভাবে কাজ করে না:
library(ggplot2)
p <- ggplot()
p <- p + with(mpg, geom_point(aes(x = hwy, y = cty)))
p # will generate an error saying `hwy` is not found
সুতরাং, আমি আবারও মনে করি, এই সমাধানটির NULLing কৌশল সম্পর্কিত একই ত্রুটি রয়েছে:
- আমাকে এখনও প্রতিটি প্লট উপাদান ফাংশনটি দিয়ে যেতে হবে এবং যুক্তিটি একটিতে আবৃত করতে হবে
with()
কলটিতে হবে with()
কল বিভ্রান্তিকর করা হয়। আমার এখনও একটিdata =
যুক্তি সরবরাহ করা দরকার ; সবwith()
করছে আনন্দিতR CMD check
।
উপসংহার
আমি এটি যেভাবে দেখছি, সেখানে তিনটি বিকল্প থাকতে পারে:
- লবি সিআরএএন নোটগুলি এটিকে "উত্সাহী" ( সিআরআন নীতি অনুসারে ) বলে তুচ্ছ করে তা উপেক্ষা করার জন্য , এবং প্রতিবারই আমি কোনও প্যাকেজ জমা দিলে তা করুন
- দুটি অনাকাঙ্ক্ষিত কৌশলগুলির মধ্যে একটির সাথে আমার কোডটি ঠিক করুন (নুলিং বা
with()
ব্লক) - হুম সত্যই উচ্চস্বরে এবং আশা করি সমস্যাটি চলে যাবে
এই তিনজনের কেউই আমাকে খুশি করতে পারে না এবং আমি ভাবছি যে লোকেরা আমাকে কী পরামর্শ দেয় (এবং অন্যান্য প্যাকেজ বিকাশকারীরা ggplot2 এ ট্যাপ করতে চায়) কী করা উচিত। সকলকে আগাম ধন্যবাদ। আমি এই মাধ্যমে আপনার এমনকি পড়া সত্যিই প্রশংসা :-)
aes_string
transform
এবং subset
এটিও খুব সমস্যা (100% নিশ্চিত নয়, তবে এটি বোধগম্য)।