我有一个看似简单的问题,但我似乎无法找到一个好的解决方案。
我有一个逻辑向量,如下所示:
vector = c(FALSE, FALSE, FALSE, FALSE, FALSE, TRUE, FALSE, FALSE, FALSE, TRUE, FALSE, FALSE)
Run Code Online (Sandbox Code Playgroud)
我希望该向量只包含一个 TRUE 值。所以其中之一需要变成 FALSE。我不想手动完成,因为这是循环的一部分。通常,在循环中生成的逻辑向量将只包含一个 TRUE 值。有时它会生成两个或更多,如果发生这种情况,我想“删除”其他 TRUE 值。
我试过这个:
if(length(which(vector)) > 1) {
for(j in 1:(length(which(vector)) - 1)) {
which(vector)[j] <- FALSE
}
}
Run Code Online (Sandbox Code Playgroud)
但后来我收到一个错误: Error in which(vector) <- '*vtmp*' : could not find function "which<-"
对于我的工作,我必须编写 600 行以上的脚本。我的脚本对我的同事来说是可读的,这一点很重要,但我注意到,即使在阅读我自己的代码时,我也需要滚动很多次才能找到某个函数。
问题不在于代码丑陋或没有注释——每一行都有注释解释正在做什么以及为什么。它也是有组织的——它遵循一个非常可预测的结构。我所困扰的是所有垂直滚动。这似乎已经过时了。当我编写单词或乳胶文档时,我可以创建被软件识别为索引点的标题。这些索引点随后显示在目录中。
我可以在 R 中做类似的事情吗?有没有任何编程语言允许像这样的索引点?维基百科也这样做,例如链接https://en.wikipedia.org/wiki/Meteorological_history_of_Hurricane_Patricia#Peak_strength将带您进入有关飓风峰值强度的段落。
我有一个包含如下信息的数据框:
df <- data.frame(Col1 = c("value1", "value1", "value2", "value2"), Col2 = c("value2", "value1", "value2", "value1"), stringsAsFactors = F)
+--------+--------+
| Col1 | Col2 |
+--------+--------+
| value1 | value2 |
| value1 | value1 |
| value2 | value2 |
| value2 | value1 |
+--------+--------+
Run Code Online (Sandbox Code Playgroud)
我想创建第三列,其中包含颜色信息,具体取决于前两列的值是否相同。现在我的脚本是这样的:
for (i in 1:nrow(df)) {
if(df[i,1] == df[i,2]) {
df$color[i] <- "black"
} else {
df$color[i] <- "grey"
}
}
Run Code Online (Sandbox Code Playgroud)
这给了我以下输出:
+--------+--------+-------+
| Col1 | Col2 | color |
+--------+--------+-------+
| value1 | …Run Code Online (Sandbox Code Playgroud) 我是 Shiny 的新手(与 R 一起工作了几个月),我试图弄清楚处理多个上传文件的“Shiny”方式是什么。
我的目标是拥有一个用户可以上传多个文件的界面。必须从这些文件中以大量图表和绘图的形式生成报告。从我在 Shiny 教程中学到的,在服务器端,所有对象都是相互隔离的(意味着它们不能被读取,除非你显式调用另一个函数)。
正如您在下面的代码中看到的那样,这意味着我必须为每个图复制处理代码。这似乎效率低下。处理这个问题的“闪亮”方式是什么?
另外,我遗漏了一堆对于示例来说不是绝对必要的代码。本质上,我需要做更多的处理,我不想为每个情节复制所有代码。
我特别询问服务器端代码。我想读入包含不同内容的多个文件。服务器端代码中的操作只是占位符,我实际上并不想绑定任何东西,但我把它放在那里以保持代码简单。我希望能够对导入的数据框做任何我想做的事情。
library(shiny)
# Define UI for application
ui <- fluidPage(
# Sidebar with file input
sidebarLayout(
sidebarPanel(
fileInput("people", NULL, multiple = FALSE, accept = ".csv",
buttonLabel = "Browse...", placeholder = "people file"),
fileInput("info", NULL, multiple = FALSE, accept = ".csv",
buttonLabel = "Browse...", placeholder = "info file"),
),
# Show the results of the data processing
mainPanel(
imageOutput("plot"),
tableOutput("base_data")
)
)
)
# Define server logic required to process the …Run Code Online (Sandbox Code Playgroud)