في R ، هل يمكنني إيقاف الطباعة (Cat ("")) من العودة الفارغة؟ ولماذا يعيد Cat ("foo") foo>

StackOverflow https://stackoverflow.com/questions/4055762

  •  27-09-2019
  •  | 
  •  

سؤال

إذا أدخلت

print(cat(""))

انا حصلت

NULL

أريد أن استخدام cat() لطباعة تقدم البرنامج النصي R ، لكنني لا أفهم سبب عودته NULL في نهاية كل ما عندي من سلاسل متسلسلة ، والأهم من ذلك ، كيف أتوقف؟

هل كانت مفيدة؟

المحلول

جميع إجاباتك موجودة في الوثائق ?cat. الأجزاء التي تجيب على سؤالك المحدد هي:

الحجج:

fill: a logical or (positive) numeric controlling how the output is
      broken into successive lines.  If ‘FALSE’ (default), only
      newlines created explicitly by ‘"\n"’ are printed.
      Otherwise, the output is broken into lines with print width
      equal to the option ‘width’ if ‘fill’ is ‘TRUE’, or the value
      of ‘fill’ if this is numeric.  Non-positive ‘fill’ values
      are ignored, with a warning.

... و ...

قيمة:

 None (invisible ‘NULL’).

لذلك لا يمكنك التوقف print(cat(...)) من العودة NULL لأن هذا ما cat عائدات. وتحتاج إلى إضافة خطوط جديدة بشكل صريح cat("foo\n").

نصائح أخرى

NULL هي قيمة إرجاع "CAT ()". إذا حذفت "print ()" الخارجي ، فلن ترى الفارغ.

لقد واجهت نفس المشكلة بالضبط. شيء صغير، cat() هو متزعزع بعض الشيء تحت ر. لم تدخل في تفاصيل رائعة حول كيفية محاولة استخدامك cat() لكني أقترح النظر في paste().

?paste

أعتقد أنه قد يكون ما تبحث عنه.

لا أرى الحاجة إلى الاستخدام print(cat()). لطباعة رسالة cat() كافية بالفعل. قد يكون هذا ما تبحث عنه:

  for (j in 1:n) {
     cat("Running loop", j, "of", n, "\n")
  }

لهذا ، غالبا ما أستخدم writeLines(), ، بالاشتراك مع strwrap(), ، و paste() للجمع ، قل قيمة الحلقة إذا كنت أقوم بطباعة معلومات حول التكرار الحالي. strwrap() يتولى الالتفاف خطوط طويلة كما هو مطلوب ، و writeLines() يعني أنه لا يجب أن أتذكر إضافة ملف "\n" في نهاية بلدي cat() المكالمات.

> writeLines(strwrap("a very very very very long long long long long long long long string, that is too wide for the current pager width"))
a very very very very long long long long long long long long string,
that is too wide for the current pager width

فيما يلي مثال يستخدمه لطباعة مؤشر التكرار:

for(i in 1:1000) {
    if(isTRUE(all.equal(i %% 100, 0)))
        writeLines(strwrap(paste("Iteration", i)))
    ## do something
}

يعطي:

> for(i in 1:1000) {
+     if(isTRUE(all.equal(i %% 100, 0)))
+         writeLines(strwrap(paste("Iteration", i)))
+     ## do something
+ }
Iteration 100
Iteration 200
Iteration 300
Iteration 400
Iteration 500
Iteration 600
Iteration 700
Iteration 800
Iteration 900
Iteration 1000

إذا كنت ترغب في تعيينه إلى متغير ، لاستخدامه في حلقة *تطبيق أو وظيفة (x) ، جرب هذا:

x<-eval(paste0(name,".y"))

الاسم هو المتغير ، ويضيف ". y" سلسلة ، كما يقول لصق الطباعة ، ويقوم Eval بتقييم الطباعة ، ويعينها إلى متغير ، والفأس هو هذا المتغير.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top