理解和重建数据帧到 d3 格式的过载
Understanding and rebuilding overload of a dataframe to d3 format
从 R 到 nvd3 折线图,我真的对数据帧过载的函数感到绝望。我的意图是使用 nvd3 折线图在 R Shiny 应用程序中显示数据框,如下所示:
https://shiny.rstudio.com/gallery/nvd3-line-chart-output.html
主要问题是,X 轴只是一个递增的数字,由重载数据帧的行数给出(如上例所示)。我需要将数据框的第一列作为我的 x 轴。因此我想更改代码,实际目标是用 R 中可用的 r2d3 函数替换它。
在这个例子中我不明白以下事情:
数据帧如何重载到 mentoined 函数然后重载到图表?
谁能告诉我一种查看转换函数输出的方法,并将其替换为手动创建的 d3 字符串以进行测试?
函数的调用:
output$mychart <- renderLineChart({
df_stocking_catches
})
功能没看懂
# To be called from server.R
renderLineChart <- function(expr, env=parent.frame(), quoted=FALSE) {
# This piece of boilerplate converts the expression `expr` into a
# function called `func`. It's needed for the RStudio IDE's built-in
# debugger to work properly on the expression.
installExprFunction(expr, "func", env, quoted)
function() {
dataframe <- func()
mapply(function(col, name) {
values <- mapply(function(val, i) {
list(x = i, y = val)
}, col, 1:nrow(dataframe), SIMPLIFY=FALSE, USE.NAMES=FALSE)
list(key = name, values = values)
}, dataframe, names(dataframe), SIMPLIFY=FALSE, USE.NAMES=FALSE)
}
}
感谢您提出任何建议。
山姆
我通过将索引 x = i
更改为找到解决方案的第一步
x = dataframe[i,1]
此更改将第一列作为图表的 x 值
但是,第一列仍然显示为线图中的一条线,这没有意义......也许任何人都知道如何更改代码以跳过第一列作为线值。
有什么想法吗?
renderLineChart <- function(expr, env=parent.frame(), quoted=FALSE) {
# ...
installExprFunction(expr, "func", env, quoted)
function() {
dataframe <- func()
mapply(function(col, name) {
print(name)
values <- mapply(function(val, i) {
list(x = dataframe[i,1], y = val)
}, col, 1:nrow(dataframe), SIMPLIFY=FALSE, USE.NAMES=FALSE)
...
欢呼,明白了!
它不是很漂亮,但它完全符合我的要求。使用调试函数browser()和print()命令一步步分析函数。自己解决了感觉自己是个天才,但是还是没看懂这段烂代码
renderLineChart <- function(expr, env=parent.frame(), quoted=FALSE) {
installExprFunction(expr, "func", env, quoted)
function() {
dataframe <- func()
mapply(function(col, name) {
if(name!="Year"){
values <- mapply(function(val, i) {
list(x = dataframe[i,1], y = val)
#browser()
#print(dataframe[i,1])
}, col, 1:nrow(dataframe), SIMPLIFY=FALSE, USE.NAMES=FALSE)
list(key = name, values = values)
}
}, dataframe[,-1], names(dataframe[,-1]), SIMPLIFY=FALSE, USE.NAMES=FALSE)
}
}
希望任何人都能从中得到启发post。
再见
从 R 到 nvd3 折线图,我真的对数据帧过载的函数感到绝望。我的意图是使用 nvd3 折线图在 R Shiny 应用程序中显示数据框,如下所示:
https://shiny.rstudio.com/gallery/nvd3-line-chart-output.html
主要问题是,X 轴只是一个递增的数字,由重载数据帧的行数给出(如上例所示)。我需要将数据框的第一列作为我的 x 轴。因此我想更改代码,实际目标是用 R 中可用的 r2d3 函数替换它。
在这个例子中我不明白以下事情: 数据帧如何重载到 mentoined 函数然后重载到图表? 谁能告诉我一种查看转换函数输出的方法,并将其替换为手动创建的 d3 字符串以进行测试?
函数的调用:
output$mychart <- renderLineChart({
df_stocking_catches
})
功能没看懂
# To be called from server.R
renderLineChart <- function(expr, env=parent.frame(), quoted=FALSE) {
# This piece of boilerplate converts the expression `expr` into a
# function called `func`. It's needed for the RStudio IDE's built-in
# debugger to work properly on the expression.
installExprFunction(expr, "func", env, quoted)
function() {
dataframe <- func()
mapply(function(col, name) {
values <- mapply(function(val, i) {
list(x = i, y = val)
}, col, 1:nrow(dataframe), SIMPLIFY=FALSE, USE.NAMES=FALSE)
list(key = name, values = values)
}, dataframe, names(dataframe), SIMPLIFY=FALSE, USE.NAMES=FALSE)
}
}
感谢您提出任何建议。 山姆
我通过将索引 x = i
更改为找到解决方案的第一步
x = dataframe[i,1]
此更改将第一列作为图表的 x 值
但是,第一列仍然显示为线图中的一条线,这没有意义......也许任何人都知道如何更改代码以跳过第一列作为线值。
有什么想法吗?
renderLineChart <- function(expr, env=parent.frame(), quoted=FALSE) {
# ...
installExprFunction(expr, "func", env, quoted)
function() {
dataframe <- func()
mapply(function(col, name) {
print(name)
values <- mapply(function(val, i) {
list(x = dataframe[i,1], y = val)
}, col, 1:nrow(dataframe), SIMPLIFY=FALSE, USE.NAMES=FALSE)
...
欢呼,明白了! 它不是很漂亮,但它完全符合我的要求。使用调试函数browser()和print()命令一步步分析函数。自己解决了感觉自己是个天才,但是还是没看懂这段烂代码
renderLineChart <- function(expr, env=parent.frame(), quoted=FALSE) {
installExprFunction(expr, "func", env, quoted)
function() {
dataframe <- func()
mapply(function(col, name) {
if(name!="Year"){
values <- mapply(function(val, i) {
list(x = dataframe[i,1], y = val)
#browser()
#print(dataframe[i,1])
}, col, 1:nrow(dataframe), SIMPLIFY=FALSE, USE.NAMES=FALSE)
list(key = name, values = values)
}
}, dataframe[,-1], names(dataframe[,-1]), SIMPLIFY=FALSE, USE.NAMES=FALSE)
}
}
希望任何人都能从中得到启发post。 再见