簡體   English   中英

R 粘貼使用循環

[英]R paste using a loop

我正在為軟件生成一個輸入文件。 我在paste0() function 中遇到了不一致。 這是我的示例名稱列表。

vars <- c("1234_AS_SA1_PCNS","2345_AS_SA2_UDA", "3823_AS_SA3_CL")

我想打印這個:

 "Equal = (1234_AS_SA1_PCNS, Slope[0]),
          (2345_AS_SA2_UDA, Slope[0]),
          (3823_AS_SA3_CL, Slope[0]);"

我試過這個,但它沒有完成這項工作。 不知何故,“平等”走到了盡頭。

paste0("Equal = ", 
       
       for(i in 1:length(vars)) {
         Equal <- paste0("(",vars[i], ", Slope[0])", ",")
         print(Equal)
       })


[1] "(1234_AS_SA1_PCNS, Slope[0]),"
[1] "(2345_AS_SA2_UDA, Slope[0]),"
[1] "(3823_AS_SA3_CL, Slope[0]),"
[1] "Equal = "

此 function 沒有正確使用","以及";" 在最后。

有什么想法嗎? 謝謝。

我們可以在沒有循環的情況下執行此操作,因為paste是矢量化的

cat(paste0("Equal = ", paste("(", vars, ", Slope[0])",
        collapse=",\n ", sep=""), ";"))
Equal = (1234_AS_SA1_PCNS, Slope[0]),
 (2345_AS_SA2_UDA, Slope[0]),
 (3823_AS_SA3_CL, Slope[0]);

如果我們需要在末尾加上雙引號

cat(dQuote(paste0("Equal = ", paste("(", vars, ", Slope[0])",
        collapse=",\n ", sep=""), ";"), FALSE))
"Equal = (1234_AS_SA1_PCNS, Slope[0]),
 (2345_AS_SA2_UDA, Slope[0]),
 (3823_AS_SA3_CL, Slope[0]);"

或者可能

cat(dQuote(paste0("Equal = ", paste(sprintf('"(%s, Slope[0])"', vars), collapse=",\n ", sep="")), FALSE))
"Equal = "(1234_AS_SA1_PCNS, Slope[0])",
 "(2345_AS_SA2_UDA, Slope[0])",
 "(3823_AS_SA3_CL, Slope[0])""

您不能像這樣使用 for 循環“擴展”到 function arguments 中。 尤其是不要試圖print它們。 這不是 Bash。

vars <- c("1234_AS_SA1_PCNS","2345_AS_SA2_UDA", "3823_AS_SA3_CL")

# Generate each "(<var>, Slope[0])" section
sections <- as.list(paste0("(", vars, ", Slope[0])"))

# Join the sections with ", "
sections_str <- do.call(paste, c(sections, sep = ", "))

# Construct the final string
result <- paste0("Equal = ", part2)

print(result)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM